文章目录
article
基础概念
AI文章摘要
qwen-turbo-latest
加载中...
数据类型差异
原始类型增强
- const类型:
- C语言的全局常量为默认外部链接, C++默认为内部链接(static).
- C语言的常量是可以寻址, C++常量是不可以寻址(编译期符号表维护)
- 运行期对const常量进行初始化的, const常量能进行寻址, 修改内存值影响常量值
- e.g. 使用变量进行初始化const int a=b; 结构体常量const T a ={val1,val2…}
- 对全局const常量声明为外部扩展时, const常量能进行寻址, 修改内存值影响常量值.
- e.g. extern const int a =100 ;
- 对const常量取地址(取地址, 引用定义), 会提供临时内存地址. 修改内存值不影响常量值
- e.g. const int a =100; int* ptr = &a;
- 运行期对const常量进行初始化的, const常量能进行寻址, 修改内存值影响常量值
- struct类型:
- C语言使用结构体时必须加上struct关键字, C++可加可不加.
- C语言结构体内不能定义函数, C++结构体内不仅可以定义函数, 还可以定义命名空间
新增类型
- class类型: class是c++面向对象特性的重要实现.
- bool类型: C语言需要使用bool.h来实现bool数据类型, C++原生支持bool类型占用一个字节大小
- 引用类型: 引用即被引用对象本身, 内部由指针实现, 所以它的占用和指针一致.
- 左值引用: 即左值对象的引用, 语法 Type &A = B
- 左值往往是变量, 左值引用的用法和原变量完全一致, 所以左值引用相当于变量别名
- 非常量左值引用不能引常量左值, 有背常量不可变规则.
- 常量左值可以引用引右值, 创建临时空间进行引用, 非常量左值引用不能引右值
- 右值引用: 即右值对象的引用, 语法Type &&A=B
- 右值往往是临时对象, 右值引用的用法和临时对象完全一致, 所以右值引用相当于延长临时变量的生命周期.
- 非常量右值引用不能引常量右值, 有背常量不可变规则.
- 右值引用不能引左值
- 链式编程: 如果函数的返回值是引用, 那么这个函数可以作为左值, 实现链式编程.
- 例如: person & test(){ return *this} ; p.test().test().test(); 返回值为对象, 就可以再调用它的成员.
- 左值引用: 即左值对象的引用, 语法 Type &A = B
表达式差异
- 三目运算符增强: C语言的三目运算符返回右值, C++的三目运算符返回左值
- 自增自减运算符增强: C语言中++a返回右值, C++中++a返回左值
- 指针转换增强: C语言的指针存在隐式类型转换风险, C++指针必须强制类型转换
新增特性
- namespace关键字: namespace相当于一个新的作用域, 支持在里边定义变量、函数和结构体, 或者嵌套另一个namespace
- 语法: namespace spaceID{…}
- 作用域选择: 域::对象,
- 域缺省为全局范围, 就近原则被排除;
- 域可以是namespace、class、struct
- 注意事项:
- 注意命名空间是开放的, 同名命名空间会合并元素.
- 无名空间元素,退化成静态(static)全局变量,只能给本文件使用
- 别名语法: namespace A = B ;一般很少人会使用
- using关键字:
- new关键字: