- sizeof格式:
sizeof (type name); sizeof (expr); sizeof expr;
- 使用 sizeof 的结果部分地依赖所涉及的类型:
对 char 类型或值为 char 类型的表达式做 sizeof 操作保证得 1。
对引用类型做 sizeof 操作将返回存放此引用类型对象所需的内在空间大小。
对指针做 sizeof 操作将返回存放指针所需的内在大小;注意,如果要获取该指针所指向对象的大小,则必须对指针进行引用。
对数组做 sizeof 操作等效于将对其元素类型做 sizeof 操作的结果乘上数组元素的个数。
因为 sizeof 返回整个数组在内存中的存储长度,所以用 sizeof 数组的结果除以 sizeof 其元素类型的结果,即可求出数组元素的个数:
// sizeof(ia)/sizeof(*ia) returns the number of elements in ia int sz = sizeof(ia)/sizeof(*ia);
- 动态创建的对象可用初始化变量的方式实现初始化:
int i(1024); // value of i is 1024 int *pi = new int(1024); // object to which pi points is 1024 string s(10, '9'); // value of s is "9999999999" string *ps = new string(10, '9'); // *ps is "9999999999"
- 如果不提供显式初始化,动态创建的对象与在函数内定义的变量初始化方式相同(第 2.3.4 节)。对于类类型的对象,用该类的默认构造函数初始化;而内置类型的对象则无初始化。同样也可对动态创建的对象做值初始化(value-initialize)(第 3.3.1 节):
string *ps = new string(); // initialized to empty string int *pi = new int(); // pi points to an int value-initialized to 0 cls *pc = new cls(); // pc points to a value-initialized object of type cls
- const_cast 将 const 对象转换为相应的非 const 类型的强制转换。
static_cast 编译器隐式执行的任何类型转换都可以由 static_cast 显式完成。我们常常使用 static_cast 取代由编译器实现的隐式转换。
reinterpret_cast 将操作数内容解释为另一种不同的类型。这类强制转换本质上依赖于机器,而且是非常危险的。 - 前自增/自减返回左值,后自增/自减返回右值
//OK, 前缀返回左值 std::cout << "++++i = " << ++++i << std::endl; std::cout << "----i = " << ----i << std::endl; //ERROR, 后缀返回右值 //std::cout << "i++++ = " << i++++ << std::endl; //std::cout << "i---- = " << i---- << std::endl;
![](https://img2024.cnblogs.com/blog/35695/202407/35695-20240713070336838-1837943664.jpg)