1.bool 为了使用方便,可移植性,会定义成其他类型
typedef bool int
cout << boolalpha << bool 显示对应的true false
2.enum INIT
{
one,
two,
INIT_max //方便使用
};
3.浅拷贝导致析构两次
4.delete 指针不是将该指针置为NULL,而是搞事系统该指针指针的内存可以继续被动态分配
5. 常量指针一定要初始化
6.sizeof(a)/sizeof(int) 这样写不易出错
sizeof()编译阶段处理
也可将数组和枚举类型结合使用
7.将数组名作为参数传到被调函数时已经退化为一个指针 sizeof()不是数组的长度,而是一个指针的长度
所以最好把数组的长度也传进去
8.cin >> s // s接受到空格就停止
cin.get(s,20)
cin.get() // 接受最后的换行字符 这样下一个cin.get(s1,20)才可以接受到字符
或者使用 string s; getline(cin, string);
9.在类内定义的成员函数,称为内联函数。在体外实现叫外联函数(比较狭义)
函数短小,执行次数多,编译器会自行优化为内联函数,因为主要节省的是函数切换的时间,如果函数执行的时间占主要就不划算了。
10.return *this ; 匿名对象,分配了新的空间,且生命周期只在这一行
11.#include<sys/time.h>
int get1timeofday();
12.刷新
cout << '\r'
cout << flush;
13.与c不一样 c++将const 变量当做 编译期常量处理, 不为其分配空间 ,将其值保存在名字表中,只有加上volatile
14.const
(1)const数据成员
要初始化列表中初始化
(2)const函数必须只能在类内定义,并且不可以修改函数
int fun() const;
与int fun();构成重载
函数的第一this指针,分为常量和非常量的this指针
所以可以通过修改(强制转换)this指针的属性,可以修改类的数据成员
非常量对象可以调用常量函数、非常量函数
常量对象可以调用常量函数
常量对象不可以调用非常量函数
常量函数和非常量函数重载时, 非常量对象调用非常量函数,常量对象调用常量函数
(3)修饰形参
15.mutable属性,只能用于类的数据成员,不能用于普通变量
常量函数可以修改该属性的数据成员
16.static
静态全局变量和普通全局变量,前者作用域在本文件,后者就是整个工程
类外初始化
const static int a = 100;声明初始化
静态函数可以被类的所有对象访问,但它只可以访问类的静态成员
******静态对象,数据初始化只会有一次,其他会被编译器优化***********
17.形参为对象时,参数传递是会调用该对象的复制构造函数
18.先复制成功,再释放掉旧的空间,因为新的空间可能申请失误。
19.复制构造函数与赋值运算符函数
一个初始化调用,一个对象已经定义好了,才会调用
string s = "asdasd"; //复制构造函数
20.匿名对象(临时对象) 生命周期只有当前行
(1)传参时参数
(2)类型转换
(3)函数返回值
(4)显示调用构造函数
21. C++中的关键字explicit主要是用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。类构造函数默认情况下声明为隐式的即implicit
22. 全特化模板 template<>
偏特化模板 template <template T, unsigned int N>
编译器先匹配特殊模板,再匹配普通模板
23.仿函数的本质是对“”()“”的运算符重载