字符串
如果需要用字符串字面值常量赋值和初始化一个char * ,应该使用const char *或者auto。
char *str = "hello world"; // 将出现弃用警告
数组
数组的长度必须是一个常量表达式,const常量不是常量表达式。
流程控制
c++17支持...
阅读更多
字节对齐
计算机中内存大小的基本单位是字节(byte),理论上来讲,可以从任意地址访问某种基本数据类型。
但是实际上,计算机并非逐字节大小读写内存,而是以2,4,8…的倍数的字节块来读写内存,如此一来就会对基本数据类型的合法地址作出一些限制,即它的地址必须是2,4,8…的倍数。那么就要求各种数据类型按照一定的规...
阅读更多
智能指针本质就是一个类模板,它可以创建任意的类型的指针对象,当智能指针对象使用完后,对象就会自动调用析构函数去释放该指针所指向的空间。c++引入了 3 种类型的智能指针:
std::unique_ptr :独占资源所有权的指针。
std::shared_ptr :共享资源所有权的指针。
std::...
阅读更多
左值与右值这两个概念是从 C 中传承而来的,左值指既能够出现在等号左边,也能出现在等号右边的变量;右值则是只能出现在等号右边的变量。
左值和右值在 C/C++ 中是表达式(expression)的一种属性,被称为值类别(value categories)。
表达式是指由运算符(operator)和运算对象(op...
阅读更多
左值引用
左值引用就是左值的别名,不是变量的别名,而是地址的别名,是与地址建立的一种映射关系。我们可以通过不同的别名访问同一块地址空间。
左值引用并非对象,只是为一个已经存在的对象所起的另外一个名字。
左值引用必须初始化,因为无法令左值引用重新绑定到另外一个对象。一旦初始化完成,左值引用将和他的初始值对象一直...
阅读更多
在C++中,内存分成4个区:
栈(Stack)
堆(Heap)
数据段(Data Segment)
代码段(Code Segment)
栈
栈区主要存储以下几类数据:
函数的局部变量。
函数参数。
函数返回地址。
编译器生成的额外信息(如变量对齐信息)。
栈区的特...
阅读更多
编译单元
编译器在编译代码时,只会去编译.cpp格式的源文件,并且预编译器会递归的把.cpp所有#include的头文件都拷贝到.cpp文件中去,之后对这个文件再进行编译,生成二进制的.obj文件,然后链接器会将所有的obj文件进行链接,生成最终可执行文件。所以每一个.cpp文件都是一个编译单元。
内部链接
如...
阅读更多
操作系统
操作系统
预定义宏
Windows
_WIN32, _WIN64
macOS
__APPLE__, __MACH__
Linux...
阅读更多