当前位置: 首页 > news >正文

二、C到C++的升级

C++ 的加强主要表现在:类型的加强、面向对象支持

1、C++改进

C++更强调语言的实用性,所有的变量都可以再需要使用的时候再定义,C语言中的变量都必须在作用域开始的位置定义

int c = 0;
for (int i = 1; i < 3; i++)
{
    for (int j = 1; j < 3; j++)
    {
        c += i * j;
    }
}

register 关键字请求编译器将局部变量存储与寄存器中

  • 在C++中依然支持register关键字

  • C++ 编译器有自己的优化方式

    • C语言中无法获取register变量的地址

    • C++中可以取得register变量的地址

      C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效

早期的C语言编译器不会对代码进行优化,因此register变量是一个很好的补充

2、同名变量的处理

在C语言中,重复定义多个同名的全局变量是合法的。C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。

在C++中,不允许定义多个同名的全局变量。

3、struct关键字的加强

C语言中的struct定义了一组变量的集合

C语言中的struct定义的标识符并不是一种新的类型

C++中的struct用于定义一个全新的类型

// C语言
typedef struct _tag_student Student;    
// 将struct _tag_student类型起了一个别名Student
struct _tag_student{
    const char * name;
    int age;
}

// C++
// struct定义一个全新的类型
struct Student
{
    const char * name;
    int age;
};

4、小思考

int f()int f(void)的区别:有没有区别,要看用什么编译器

  • 如果用C语言编译器,前面的函数类型是返回值为int,接收参数是任意个数参数,后面的函数表示返回值为int,不接收任何参数
  • 在C++中,这两种写法没有区别

5、默认类型

C++中所有的标识符都必须显示地声明类型

C语言中地默认类型在C++中是不合法的

f(i)
{
    printf("i = %d\n", i);
}
g()
{
    return 5;
}

在C语言中:

  • int f()表示返回值为 int, 接收任意参数的函数
  • f(void)表示返回值为int的无参函数

在C++中:

  • int f()int f(void)具有相同的意义,表示返回值为int的无参函数

C++中无默认类型,如果没有参数,就是不接受任何参数,int f(void)只是为了兼容C语言

C++ 不接受无返回值类型的函数,不允许默认类型

#include <stdio.h>

// c++中,定义了一个新的类型Student
struct Student
{
    const char* name;
    int age;
};

// C++中有问题,不合法
f(i)
{
    printf("i = %d\n", i);
}

// C++不合法
g()
{
    return 5;
}

int main(int argc, char *argv[])
{
    Student s1 = {"Delphi", 30};
    Student s2 = {"Tang", 30};
    
    f(10);
    
    printf("g() = %d\n", g(1,2,3,4,5));
    
    return 0;
}

6、总结

C++更强调实用性,可以在任意的地方声明变量

C++中的register只是一个兼容C的作用

C++编译器能够更好地进行优化

C++中地任意标识符都必须显示地指明类型

转载于:https://www.cnblogs.com/chenke1731/p/9623654.html

相关文章:

  • 腐蚀rust研究台抽奖_福世蓝无化学品循环水处理系统 --- 用来控制污垢和腐蚀
  • bat配置JDK环境变量
  • ppt如何旋转流程图_稳准狠!这四款PPT插件的炫酷技能我先抱走了
  • 正确停止线程的方式三 使用Thread类中的内置的中断标记位-----------不熟悉
  • python numpy常用操作_Python numpy的基本操作你一般人都不会
  • option标签中selected属性
  • 地表反射率影响因素_地表反射率计算-flaash.ppt
  • 计蒜客 2018南京网络赛 I Skr ( 回文树 )
  • float相乘后的类型_js中float型相乘出现问题
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • cad灯具图标_这份CAD图例图标合集,必须人手一份!
  • ffmpeg 声音参数_ffmpeg转换参数和压缩输出大小的比率
  • 网页顶部进度条-NProcess.js
  • log4j 源码解析_log4j的使用详细解析
  • 一个简单的存储过程的学习以及使用
  • EOS是什么
  • es的写入过程
  • go语言学习初探(一)
  • Java编程基础24——递归练习
  • Java知识点总结(JavaIO-打印流)
  • Vue--数据传输
  • 离散点最小(凸)包围边界查找
  • 通过npm或yarn自动生成vue组件
  • 小试R空间处理新库sf
  • 新书推荐|Windows黑客编程技术详解
  • 原生Ajax
  • 【干货分享】dos命令大全
  • hi-nginx-1.3.4编译安装
  • ​批处理文件中的errorlevel用法
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #AngularJS#$sce.trustAsResourceUrl
  • #Linux(权限管理)
  • #QT(一种朴素的计算器实现方法)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Python第六天)文件处理
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (循环依赖问题)学习spring的第九天
  • **PHP二维数组遍历时同时赋值
  • *p++,*(p++),*++p,(*p)++区别?
  • .aanva
  • .a文件和.so文件
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 使用反射注册事件
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .project文件
  • @property括号内属性讲解