C++ Primer 第(1-3)章一句话知识点总结

来源:互联网 发布:布艺沙发床价格淘宝 编辑:程序博客网 时间:2024/06/06 05:58

          C++ Primer 知识点繁多,容易忘记,故有此总结。需要注意的是许多一句话的规定不要死记硬背,尽量去思考规则背后的原因,便能事半功倍。

(1) endl是一个特殊值,称为操作符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。

(2) while(cin >> value);输入操作符返回其左操作数,所以括号里测试输入流的状态,当遇到EOF或无效输入时,流状态无效,则导致测试条件失败,linux输入ctrl+d输入EOF。

(3) C++是静态类型,在编译时执行类型检查。结果是程序中使用某个名字之前,必须告诉编译器该名字的类型。因为类型决定对象可以执行的操作,操作是否合法也在编译时检查,若操作有问题,编译器提示错误。

(4) 要想知道某字节的意义,必须知道存储在该地址的值的类型。因为知道类型才能知道表示该类型的值需要多少位和如何解释那些位。

(5) long类型计算代价远远高于int类型,选择时要考虑清楚了,而double类型计算则和float差不多,所以选择double最好了。

(6) 整数型长量默认为Int或long,看具体数值大小,而浮点型默认为double。

(7) \ooo 八进制 ;\xddd 十六进制。

(8) a * b = c ; 0 = 1;两句话都是错的

(9) 标识符必须以数字、字母和下划线开头,不能以数字开头,并且区分大小写。

(10)类型决定了分配给变量的存储空间的大小和可以在其上执行的操作。

(11)初始化分为直接初始化和复制初始化。初始化不是赋值,初始化时创建变量并給它赋初值,而赋值是擦出对象当前值并用新值代替。

(12)内置类型初始化:在函数体外定义的变量都初始化为0,而函数体内的不进行自动初始化。类类型变量初始化需要判断类型是否有默认构造函数,若有,定义该变量时可以不用显示的初始化变量,若没有,每个定义必须提供显示的初始化式。

(13)变量定义用于为变量分配存储空间,还可以为变量指定初始值。声明用于向程序表明变量类型和名字。定义也可以是声明:定义变量时我们声明了它的类型和名字。

(14)可以用extern声明变量名而不去定义它。extern声明变量不是定义它,不分配存储空间,它只说明变量定义在其他的地方。如果声明有初始化式,那么它也可以被当做定义,即使声明标记extern。只有当extern声明位于函数外部时,才可以有初始化式。

(15)变量必须且只能定义一次,使用前必须定义或声明它。所以文件中的变量定义与声明分开的,一个文件含有变量的定义,其他使用该变量的其他文件则包含该变量的声明。

(16)因为const常量在定义后不能修改,所以定义时必须初始化。

(17)const对象默认为文件的局部变量。通过指定const变量为extern,可在全程序使用该const变量。非const变量默认为extern。

(18)int &a; int &a = 10;原因

(19)const引用是指向const对象的引用。将普通的引用绑定到const引用是不合法的。原因

(20)非const引用只能绑定到与该引用同类型的对象,const引用则可以绑定到不同但相关类型的对象或右值。原因

(21)typedef使用目的:简化复杂的类型定义;允许一种类型用于多种目的,同时使得每次使用该类型的目的明确。

(22)枚举定义了常量整数集,还将它们定义成组。用来初始化枚举成员的值必须是一个常量表达式。常量表达式时编译时就能够计算出结果的整型表达式。不能改变枚举成员的值。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行。原因

(23)struct:默认public ; calss:默认private

(24)头文件一般包含类的定义、extern变量的声明和函数的声明。因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义。

(25)使用头文件的好处:保证所有文件使用给定实体的同一声明;当声明需要修改时只有头文件需要更新。

(26)extern int a = 10; double b;这两个语句都是定义。

(27)头文件不应该含有定义,但有三个例外:头文件可以定义类;inline函数;值在编译时就已知道的const对象。原因

(28)使用预处理器定义头文件保护符,避免在已经见到头文件的情况下重新处理该头文件的内容。预处理器变量的名字在程序中必须时唯一的,经常用全大写来表示,经常使用类名来组成头文件和预处理器变量的名字。

(29)如果头文件在尖括号里,编译器将会在预定义的位置集查找该头文件,若在一对引号里,认为它时非系统文件,非系统文件的查找通常开始于源文件所在的路径。

(30)字符串字面值和标准库string类型不是同一种类型。

(31)string类型的输入操作符>>:读取并忽略开头的所有空白符;读取字符直至再次遇到空白符。

(32)getline(cin, line);读取一行内容并保存到line中,但并不包括换行符,一遇到换行符将停止读入并返回,若第一个就是换行符,则line为空。

(33)不要把string.size()的的返回值赋给一个int变量。

(34)string a; string b = "hello"; a = b;必须先释放的a的内存,然后为a分配足够大的内存空间,将b的内容复制到a中。

(35)当进行string类型和字符串字面值混合连接操作时,+操作符的左右操作数必须有一个是string类型的。原因

(36)标准库不要求检查索引值,所以索引的下标越界是没有定义的,这样往往会导致严重的运行时错误。

(37)vector<string>a(b);b的元素类型及容器类型要不a一样,否则出错。

(38)vector初始化时,若没有指定元素的初始化式时,则需要根据元素的类型来判断,若为内置类型则初始化为0,若为有默认构造函数的类类型,则调用默认构造函数初始化,若没有构造函数的类类型,程序员就不能只提供元素个数,还需要提供元素初始值。

(39)vector的使用:必须时已存在的元素才能用下标操作符索引。通过下标操作符进行赋值时,不会添加任何元素。

(40)const vector<int> a(10); const vector<int>::iterator ptr = a.begin();有错误,原因








0 0
原创粉丝点击