1. 默认情况下,输出cerr不缓冲

  2. 默认情况下,写到clog是带缓冲的

  3. 默认情况下,cout是带缓冲的

  4. 内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成0,在函数体里定义的内置类型变量不进行自动初始化。

  5. const对象默认为文件的局部变量,非const变量默认为extern。要使const变量能够在其他的文件中访问,必须显式地指定它为extern。

  6. 因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义

  7. 一些const对象(常量表达式)定义在头文件中

  8. value initialization(值初始化) 当给定容器的长度,但没有显式提供元素的初始式时,对容器元素进行的初始化。元素被初始化为一个编译器产生的值的副本。如果容器保存内置类型变量,则元素的初始值将置为0。如果容器用于放置类对象,则元素的初始值由类的默认构造函数产生。只有当类提供了默认构造函数,类类型的容器元素才能进行值初始化。

  9. 使用sizeof的结果部分地依赖所涉及的类型:
    a.对char类型或值为char类型的表达式做sizeof操作保证得1.
    b.对引用类做sizeof操作将返回存放此引用类型对象所需的内存空间大小.
    c.对指针做sizeof操作将返回存放指针所需的内存大小;注意,如果要获取该指针所指向对象的大小,则必须对该指针进行解引用.
    d.对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数.因为sizeof返回整个数组在内存中的存储长度,所以用sizeof数组的结果除以sizeof其元素类型的结果,即可求出数组元素的个数.

  10. 除非显式地提供元素初值,否则内置类型的局部数组的元素没有初始化。

  11. 不管元素在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化;如果该类没有默认构造函数,则必须为该数组的元素提供显式初始化。

  12. 动态创建对象的默认初始化:如果不提供显式初始化,动态创建的对象与在函数内定义的变量初始化方式相同。对于类类型的对象,用该类的默认构造函数初始化;而内置类型的对象则无初始化。

  13. 零值指针的删除:如果指针的值为 0,则在其上做 delete 操作是合法的,但这样做没有任何意义

  14. 将 enum 对象或枚举成员提升为什么类型由机器定义,并且依赖于枚举成员的最大值。无论其最大值是什么, enum  对象或枚举成员至少提升为 int 型。如果 int 型无法表示枚举成员的最大值,则提升到能表示所有枚举成员值的、大于 int 型的最小类型( unsigned int、 long 或 unsigned long)。

  15. static_cast:编译器隐式执行的任何类型转换都可以由 static_cast 显式完成。我们常常使用 static_cast 取代由编译器实现的隐式转换。

  16. const_cast:将 const 对象转换为相应的非 const 类型的强制转换。

  17. dynamic_cast:支持运行时识别指针或引用所指向的对象

  18. reinterpret_cast:将操作数内容解释为另一种不同的类型。这类强制转换本质上依赖于机器,而且是非常危险的。

posted on 2010-06-05 17:03  cppfans  阅读(131)  评论(0编辑  收藏  举报