5th Edition 《C++ Primer 》笔记-Part I( 二 )


2.22 type :。thethetoits type but does notthe。能够 top-level const 和。当的操作数不是时,如果操作数返回的是左值,那么返回是该类型的引用类型,否则与实际类型一致 。当的操作数是时,(虽然变量肯定是返回左值的,见Part III, 13.15)只有变量是引用类型时,()才会返回引用类型,否则返回值类型;通常用(())的形式来得到引用类型 。
2.23A{/*...*/} a1, *a2;等价于 A{/*...*/}; A a1, *a2;后者更好 。C++11标准对类内的数据成员,允许in-class 初始化 。
3.,,and Array 3.1 using。using std:: 。在头文件中不应该包含using。
3.2 是一种type 。注意copy和的区别 。
3.3。(is, s);c++ 11 引入了()成员函数 。对于静态成员变量npos,其定义为: constnpos = -1;由于为类型,所以npos为类型的最大值 。
3.4 range for。for( : ) ; 在遍历中,中的变量被来自中的值初始化 。常做字符处理,常用的字符处理函数有(定义在头文件中):(c), (c), (c), (c), (c), (c), (c), (c) 。
3.5 的下标为::类型,值必须>=0&&
3.6 是一种class。能够holdof most any type.但是由于不是,所以我不能保存引用类型的数据 。C++ 11引入了()、()、()成员函数 。
3.7 Value。注意与2.9的区别 。
3.8 List 的倾向性 。
vector v{10, 2};//v有两个元素10和2 。vectorv2{10, "hi"};//v2有10个元素 。

5th Edition  《C++ Primer 》笔记-Part I

文章插图
3.9 对于,C++11为容器引入了()和cend()成员函数(相应的也有()、crend()) 。
3.10 同一样,数组也不能保存引用类型 。数组的维度值都必须大于0,但是动态数组的维度可以为0 (P478) 。
经GCC4.8.1测试, 静态数组维度为0也是可以的,但不能为负值,否则编译错误;另外,于与动态数组,负值也都是可以的 。
经测试,静态数组维度若为零,会有编译错误;另外对于动态数组,维度若为负值,也会有编译错误(提示数组大小不能超过个字节,所以若为char数组就不会有错误) 。
3.11 数组的list。list中的元素个数不能大于维度值 。否则,对于静态数组,会有编译错误;对于动态数组,会抛出异常:
int [3]={1,2,3,4}; int *[3]{1,2,3,4};
写了维度,但没有初始化,那数组元素被 ;写了维度,用初始化,但是元素个数小于维度,剩下的元素被value (为0) 。
数组直接初始时可以不用写维度(仅对第一维适用,多维数组比较特殊):int arr[] = {1,2,3};这里arr就是有个3个元素的数组,不是指针 。同样char str[] = {'a','b','c'}; char str2[] = 'abc'也是数组,但前者有3个元素,后者有4个元素,隐含添加了‘\0' 。
3.12 变量类型匹配,中括号的优先级大于*号;int *ptrs[10]; ptrs是一个数组 。int (*ptrs)[10];ptrs是一个指针 。
3.13 C++ 中说道数组的下标为类型(P116),但是也说道the index of the built-inis not antype(P121).这两者的说法似乎是矛盾的 。
在中对静态数组和动态数组均作了测试,下标为负值的时候,是作为负值来处理的,没有转化为类型 。
int array[2][3] = {1,2,3, 4, 5, 6};int (&array2)[3] = array[1];cout << array2[-1] << endl;//输出3int *pa = array2 + 1;cout << pa[-1] << endl;//输出4
3.14 C++11标准引入了begin(),end()两个库函数 。可以用在数组(或者其他容器)上,但不可以用在指针(动态数组)上 。
3.15 指针间的差值类型为 。另,间的差值类型为 。
3.16 C串常用函数:(p); (p1, p2); (p1, p2); (p1, p2) 。后两个均是从p2转到p1,所以应该保证p1有足够的空间 。