第三章 C++中的C
1. .hxx .hpp也是C++头文件
2.写可移植的C++程序:用C++标准库,和尽量使用符合POSIX标准的函数
3.头文件<climits>和<cfloat>中定义了不同基本数据类型可能存储的最大值和最小值
4.sizeof 是一个运算符 不是函数, 如果对一个变量使用它,可以不要括号: int i = sizeof i;
5.同类型指针相减,其结果是两个指针之间相隔元素的个数
6.把变量和表达式转换成字符串:在一个预处理器宏中的参数前加一个#,预处理器会把这个参数转换为一个字符数组
#define P(A) cout<< #A <<": result" << A << endl;
7.## 标志粘贴:它允许设两个标识符并把它们粘贴在一起自动产生一个新的标识符。
#deifine FIELD(a) char * a##_string;
FIELD(my); ===> char* my_string;
第五章 隐藏实现
1.友元
class My{
public:
friend void g();//友元:全局函数
friend class z;//友元:类
friend Y::fun();//友元:其它类的成员函数
}
2.友元是可以嵌套的
第七章 函数重载与默认参数
1.union(联合)可以带有构造函数、析构函数、成员函数甚至访问控制,但它不能在继承时做基类使用
2.没有类型名和标识符的union叫匿名联合
int main(){
union{
int i;
float f;
};
i=12; f = 1.0;
}
第八章 常量
1.临时变量按引用传递给一个函数时,这个函数的参数必须是const引用
class X{};
X fun()(return X();}
void g1(X&){}
void g2(const X&){}
main(){
g1( fun() );//This line will cause build error : const temporary created by fun()
g2( fun() );
}
2.类的const实例对象只能调用const成员函数。类的非const实例对象,可调用const和非const成员函数 但会优先调用非const成员函数。
第十章 名字空间
1.静态对象的构造和析构函数
全局变量、对象的构造函数在main()之前被调用,且存储空间分配在静态存储区
所有静态对象无论是全局还是局部,它的析构函数都在main()之后被调用
如果一个包含局部静态对象的函数从未被调用过,那么这个对象的构造函数也不会被执行
2.内部连接
在文件作用域内,一个被明确声明为static的对象或函数是内部连接的
内部连接的一个好处是这个名字可以放在一个头文件中而不用担心连接时发生冲突。
那些通常入在头文件里的名字。如常量、内联函数、在默认情况下都是内部连接的(当然常量只在C++中默认为是内部连接,在C中外部连接)
3.namesapce可以有别名。一个namespace可以在多个头文件中用一个标识符来定义,从而往namespace中添加内容