《C++ Primer》阅读笔记

第1章————快速入门

  • main函数的返回值必须为int型
  • 查看程序执行完的返回状态:echo $?。在Windows下则是echo %ERRORLEVEL%
  • 在for循环中可以定义变量,但是该变量只具有语句作用域。如for(int i=0; ; );
  • 利用while(std::cin>>string)做判断时,回车键是无法终止输入的。Unix中是xontrol-d,而Windows则使用control-z
  • 只有类定义的操作才能用于该类型的对象。在使用类时,时刻铭记它不是内置类型,+=等操作符很可能未定义

第2章————基本语言

  • C++有一些基本内置类型,包括算数类型和void特殊类型。算数类型包括整型、浮点型、字符型、布尔值型。
  • 对整型的赋值,signed和unsigned类型区别较大。对于unsigned类型来说,编译器必须调整越界值使其满足要求。编译器会将该值对unsigned类型的可能数目求模,然后取所得值。比如8位的unsigned char,其取值范围从0到255.如果赋值超过这个范围,那么将会取该值对256求模后的值,即n%256。但是当将超过取值范围的值赋给signed类型时,由编译器决定实际赋的值。
  • float型只能保证6位有效数字,而double型至少可以保证10位有效数字。
  • 字面值常量的类型默认为int或long类型。其精度类型决定于字面值————其值适合int就是int类型,比int大的值就是long型。通过增加后缀可以进行强制转换,如128u, 1234UL, 1L.建议使用大写L,以避免混淆。
  • 在字符前面加L就能够得到wchar_t类型的宽字符字面值。如L'a'。宽字符串也是同理,L"a wide string"。如果连接字符串字面值和宽字符串字面值,其结果是未定义的。
  • 在一行的末尾加一反斜线可将此行和下一行当作同一行处理。反斜线符号必须是该行的尾字符————不允许其后面有注释或空格。同样,后继行行首的任何空格和制表符都是字符串字面值的一部分。
  • 静态类型检查使得编译器必须能识别程序中的每个实例的类型。因此,程序中使用变量前必须先定义变量的类型。
  • 变量提供了程序可以操作的有名字的存储区。
  • 定义时指定了初始值的对象被称为已初始化的。C++支持两种初始化变量的形式:复制初始化和直接初始化。复制初始化语法用等号,直接初始化则是把初始化放在括号中:
    int ival(1024);
    int ival = 1024;
  • 初始化不是赋值!初始化指创建变量并给它赋初始值,而赋值则是擦除对象的当前值并用新值代替。
  • 当一个定义中定义了两个以上变量的时候,每个变量都可能有自己的初始化式。对象的名字立即变为可见,所以可以用同一个定义中前面已定义变量的值初始化后面的变量。已初始化变量和未初始化变量可以在同一个定义中定义。如double salary = 9.0, wage(salary + 0.1);是合法的。
  • 变量初始化规则。定义变量时未进行初始化的话,系统有时会帮我们初始化变量。是否初始化,怎么初始化取决于变量的类型和定义位置
    • 内置类型变量的初始化。若在函数体外,则变量初始化为0;若在函数体内,不进行自动初始化。
    • 类类型变量的初始化。若类有默认构造函数,不论类变量在哪个位置定义,类变量都会自动进行初始化;若类类型没有默认构造函数,那么每个定义必须显示初始化。
  • 声明定义的区别。变量的声明用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。声明用于向程序表明变量的类型和名字。
  • 作用域分为全局作用域、局部作用域、语句作用域。在局部作用域中重新定义变量的话可以屏蔽全局变量。注意是重新定义!不是声明!
  • 不要使用魔数(magic number)。
  • const对象默认为文件的局部变量。
  • 引用是一种复合类型,就是对象的另一个名字。非const引用只能绑定到与该引用同类型的对象。const引用则可以绑定到不同但相关的类型的对象或绑定到右值。
  • vector是容器,是一个类模板,它不是一种类型。
posted @ 2016-06-07 08:41  默默学习中  阅读(163)  评论(0)    收藏  举报