1. 普通引用绑定到const对象是非法的,
如 const int i = 1024;
int &r = i;//错误。应为const int & r = i;
2.const引用可以初始化为不同类型的对象或者初始化为右值,如字面值常量:int i = 42; const int &r = 42; const int &r2 = r + 1;
同样的初始化对于非const引用是不合法的,而且会导致编译错误。
要注意:非const引用只能绑定到与该引用同类型的对象桑,const引用则可以绑定到不同但相关的类型的对象上,或者绑定到右值上。
3.枚举类型可以像类一样定义和初始化枚举变量。枚举类型的对象只能通过其枚举成员或是同意枚举类型的其他对象来进行初始化或是赋值。
4.getline对空白符的处理:不忽略行开头的空白字符,读取字符直至遇到换行符,读取终止并丢弃换行符,
5. getline函数将istream参数作为返回值,和输入操作符一样,也可以把它当作判断条件,如:
int main()
{
string line;
while(getline(cin, line))
cout<<line<<endl;
return 0;
}
6. string 对象可以和字符串字面值混合连接,当进行string对象和字符串字面值混合连接操作时,+ 操作符的左右操作数必须至少有一个是string类型。
7. 关于容器vector:vector不是一种数据类型,而只是一个类模板,可以用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此vector<int> 和 vector<string>都是数据类型。
8. vector对象的重要性就在于可以在运行时高效地添加元素,因为vector增长的效率高,在元素值已知的情况下,最好动态的添加元素。
9. vector的 下标操作不增加元素:
初学 C++ 的程序员可能会认为 vector 的下标操作可以添加元素,其实不然:
vector<int> ivec; // empty vector
for (vector<int>::size_type ix = 0; ix != 10; ++ix)
ivec[ix] = ix; // disaster: ivec has no elements
上述程序试图在ivec 中插入 10 个新元素,元素值依次为 0 到9 的整数。但是,这里 ivec是空的vector 对象,而且下标只能用于获取已存在的元素。
这个循环的正确写法应该是:
for (vector<int>::size_type ix = 0; ix != 10; ++ix)
ivec.push_back(ix); // ok: adds new element with value ix
10.
必须是已存在的元素才能使用下标操作符进行索引,通过下表操作符索引时不会添加任何元素。