对引用类型做 sizeof 操作将返回存放此引用类型对象所需的内在空间大小。
对指针做 sizeof 操作将返回存放指针所需的内在大小;注意,如果要获取该指针所指向对象的大小,则必须对指针进行引用。
delete pi;
如果指针指向不是用 new 分配的内存地址,则在该指针上使用 delete 是不合法的。
C++ 保证:删除 0 值的指针是安全的。
对同一个内存空间使用两次 delete 表达式。当两个指针指向同一个动态创建的对象,删除时就会发生错误。如果在其中一个指针上做 delete 运算,将该对象的内存空间返还给自由存储区,然后接着 delete 第二个指针,此时则自由存储区可能会被破坏。
vector<string> svec(10);
delete svec;// svec是一个vector对象,不是指针,不能对它进行delete操作。
显式转换也称为强制类型转换(cast),包括以下列名字命名的强制类型转换操作符:static_cast、dynamic_cast、const_cast 和 reinterpret_cast。
08.7.1
dynamic_cast 支持运行时识别指针或引用所指向的对象。
const_cast ,顾名思义,将转换掉表达式的 const 性质。
编译器隐式执行的任何类型转换都可以由 static_cast 显式完成:可通过 static_cast 将存放在 void* 中的指针值强制转换为原来的指针类型,此时我们应确保保持指针值。
reinterpret_cast 通常为操作数的位模式提供较低层次的重新解释。
对于 switch 结构,只能在它的最后一个 case 标号或 default 标号后面定义变量:
制定这个规则是为避免出现代码跳过变量的定义和初始化的情况。
goto 语句不能跨越变量的定义语句向前跳转:如果确实需要在 goto 和其跳转对应的标号之间定义变量,则定义必须放在一个块语句中: