2、C++ Primer 4th 笔记,基本语言相关的概念[1]

1C++中,每个表达式都会产生一个结果,通常是将操作符作用到其操作数所产生的值。当操作符是输出操作符时,结果是左操作数的值。也就是说,输出操作返回的值是输出流本身。

2、注释对不可嵌套。指/**/

3、我们使用istream对象作为while的测试条件时,结果是测试流的状态,如果是流是有效的(输入的是有效字符或没有到达文件结尾),则测试成功。

4、因为头文件使用尖括号是找头文件的时候先从系统目录下找,双引号是先从工程所在的目录下找,所以一般,标准库的头文件用尖括号,非标准库用双括号。

5、默认情况下,读cin会刷新cout,当程序正常结束时,cout也会被刷新。

6C++是静态类型语言,在编译时执行类型检查。

7C++中,把负值赋给unsigned对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值。

8、变量类型决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围及可应用在该变量上的操作集。

9、左值可以出现在赋值语句的左边或右边,如变量是左值。右值只能出现在赋值语句的右边,如数字字面值是右值,右值只能读不能写。

10、一般而言,对象是内存中具有类型的区域。

11、初始化不是赋值,初始化是创建变量并给初始值,而赋值是擦除对象的当前值并且新值代替。

从概念上讲,赋值操作要做以下工作:

s1 = s2

1)先把s1占用的相关内存释放掉;

2)然后再分配给s1足够存放s2副本的内存空间;

3)最后把s2中的所有字符复制到新分配的内存空间。

12变量的定义用于为变量分配存储空间,还可以指定初始值,在一个程序中,变量有且仅有一个定义。

声明用于向程序表明变量的类型和名字,定义也是声明。声明可以有多次。

只有当声明也是定义时,声明才可以有初始化式,且只有当extern声明位于函数外部时,才可以含有初始化式。

12、非const变量默认为extern。要使const变量能够在其他的文件中访问,必须显式地指定它为extern

13、复合类型是指用其它类型定义的类型。不能定义引用类型的引用。

14const引用是指const对象的引用。

15、非const引用只能绑定到与该引用同类型的对象;const引用则可以绑定到不同但相关的类型的对象或绑定到右值。

16、枚举成员都是常量表达式。常量表达式是编译器在编译时就能够计算出结果的整形表达式。

17const对象默认为定义它的文件的局部变量。当我们在头文件中定义了const变量后,每个包含该头文件的源文件都有了自己的const的变量,名称和值都一样。

18、转义字符是反斜线后面跟着一个字符,一个3位八进制数或一个十六进制的数。

19、为了避免溢出,保存一个string对象size的最安全的方法是使用标准库类型string::size_type;它被定义为与unsigned具有相同的含义。但是不要把size的返回结果赋值给个int变量。

20、字符串和字面值的连接

当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。

21vector是类模板,只有具现后,如vector<int>后才是数据类型。

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

22、迭代器

vector<int>::const_iterator //an iterator that cannot write elements

const vector<int>::iterator //an iterator whose value cannot change

任何改变vector长度的操作都会使已存在的迭代器失效;如在调用push_back之后,就不能再信赖先前指向vector的迭代器的值了。

    difference_type vector定义的signed整形,用于存储两个迭代器间的距离。

23bitset

bitset类也是一种类模板,通过长度来初始化。如bitset<32>

可以用unsigned值初始化bitset对象;以低阶位对齐。也可以string对象初始化bitset对象;string对象和bitset对象之间是反向转化的:string对象的最右边字符(下标最大的那个字符)用来初始化bitset对象的低阶位(即下标为0的位)

string strval("1000");

bitset<32> bitvec4(strval);

posted @ 2011-03-04 12:49  浪里飞  阅读(417)  评论(0编辑  收藏  举报