首页
博客
Wiki
项目
关于
C++
首页
Wiki
系统开发专区
C++
基础
基础
发布于 May 6, 2023 • 1 分钟 阅读 • 141 字
算法
数据结构
算法
数据结构
分享至
RubitCat
链接 已复制到剪贴板
本页目录
1. 数据类型差异
1.1 原始类型增强
1.2 新增类型
2. 表达式差异
3. 新增特性
1. 数据类型差异
1.1 原始类型增强
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;
struct类型
:
C语言使用结构体时必须加上struct关键字, C++可加可不加.
C语言结构体内不能定义函数, C++结构体内不仅可以定义函数, 还可以定义命名空间
1.2 新增类型
class类型
: class是c++面向对象特性的重要实现.
bool类型
: C语言需要使用bool.h来实现bool数据类型, C++原生支持bool类型占用一个字节大小
引用类型
: 引用即被引用对象本身, 内部由指针实现, 所以它的占用和指针一致.
左值引用
: 即左值对象的引用, 语法 Type &A = B
左值往往是变量, 左值引用的用法和原变量完全一致, 所以左值引用相当于变量别名
非常量左值引用不能引常量左值, 有背常量不可变规则.
常量左值可以引用引右值, 创建临时空间进行引用, 非常量左值引用不能引右值
右值引用
: 即右值对象的引用, 语法Type &&A=B
右值往往是临时对象, 右值引用的用法和临时对象完全一致, 所以右值引用相当于延长临时变量的生命周期.
非常量右值引用不能引常量右值, 有背常量不可变规则.
右值引用不能引左值
链式编程
: 如果函数的返回值是引用, 那么这个函数可以作为左值, 实现链式编程.
例如: person & test(){ return *this} ; p.test().test().test(); 返回值为对象, 就可以再调用它的成员.
2. 表达式差异
三目运算符增强
: C语言的三目运算符返回右值, C++的三目运算符返回左值
自增自减运算符增强
: C语言中++a返回右值, C++中++a返回左值
指针转换增强
: C语言的指针存在隐式类型转换风险, C++指针必须强制类型转换
3. 新增特性
namespace关键字
: namespace相当于一个新的作用域, 支持在里边定义变量、函数和结构体, 或者嵌套另一个namespace
语法
: namespace spaceID{…}
作用域选择
: 域::对象,
域缺省为全局范围, 就近原则被排除;
域可以是namespace、class、struct
注意事项
:
注意命名空间是开放的, 同名命名空间会合并元素.
无名空间元素,退化成静态(static)全局变量,只能给本文件使用
别名语法: namespace A = B ;一般很少人会使用
using关键字
:
new关键字
:
本页目录:
1. 数据类型差异
1.1 原始类型增强
1.2 新增类型
2. 表达式差异
3. 新增特性
RubitCat
每个优秀的人,都有一段沉默的时光。那段时光,是付出了很多努力,却得不到结果的日子,我们把它叫做扎根。
RubitCat
代码 已复制到剪贴板