C++ Primer阅读心得(第一章、第二章上)

来源:互联网 发布:黑马程序员html5视频 编辑:程序博客网 时间:2024/04/30 10:57

1.在iostream库中,除了cin和cout之外,还有cerr和clog对象,它们输出给标准错误stderr,其中clog是cerr的带缓冲版本(话说这么多年我怎么没见人用过?)

2.c++中每个表达式都有返回值,其中输入操作符>>和输出操作符<<的返回值是iostream对象本身(例如cin和cout),所以你可以写一长串的连续输入或者输出,

int a,b,c,d;cin>>a>>b>>c>>d;因为>>操作符返回cin对象,所以等同于:cin>>a;cin>>b;cin>>c;cin>>d;

3.c++中的注释包含//(注释一行)和/**/(注释一片)两种,推荐使用//注释你需要注释的每一行。因为如果使用/**/的话,没准中间有个*/的话代码就乱掉了,还不如老老实实的用//注释每一行。再说一种工作中遇到的奇葩的注释形式#if 0,也是一次注释一片的那种:

#if 0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#endif

4.增加了char16_t 和 char32_t 两种为unicode字符集服务的字符类型,增加了long long类型,增加了nullptr用来取代NULL给指针赋空的初始值使用;扩展了前缀和后缀(注意:它们可以组合使用):

前缀:u(unicode 16,char16_t)U(unicode 32,char132_t)L(宽字符,wchar_t)u8(utf-8,char)后缀:u or U:代表unsignedl or L:整数值代表long,浮点数代表long doublell or LL:代表long long(c++11中新增类型)f or F:代表float

5.char有时候是signed char,有时候是unsigned char,具体由编译器决定;所以当你需要一个小整数时,不要使用char,因为这依赖于编译器,而应该明确指定你需要的是signed char或者是unsigned char。

6.字符串字面值的连接:若干个字符串字面值之间,如果只有空格、制表符(/t)和换行符(/n)存在,那么他们会被自动连接为一个新的字符串字面值。例如:

   cout<<"This "           "is "                          "a "           "cutted "           "string!"       <<endl;

会输出This is a cutted string!(泪奔,比java的字符串相加好多了)

7.反斜杠的使用:c++程序中,在一行的最后一个字符为'/'的话('/'之后不能有空格和制表符),本行与下一行会被当作同一行来处理。注意:如果下一行含有空格或者制表符也会被算入的哦,也就是说必须顶格写(这一点在使用缩进的IDE中用处不大)。例如:

   cou/   t<<"tes/   t"</   <endl;等同于:   cout<<"test"<<endl;

8.C++中变量的初始化有三种方式:一,直接初始化;二,复制初始化;三,列表初始化(c++11新增)

int val(1024);  //直接初始化(构造函数?)int val =1024; //复制初始化(拷贝构造函数?)int val = {1024};//列表初始化T val{x,y}; //列表初始化自定义对象,直接调用构造函数return {x,y}; //返回一个使用x和y列表初始化的对象(调用构造函数产生临时对象)

9.初始化与赋值的区别:C++中赋值使用等号,很多时候初始化也使用等号,但是这两者是有区别的。初始化指的是创建新的变量并给予初始值,而赋值指的是擦除变量原有的值,使用新的值来替代,两者是完全不同的。

10.初始化时应当注意:同一语句中,不同变量的初始化应当分别进行。例如:

int val1 = val2 = 100; (错误)int val1 = 100, val2 = 100; (正确)

11.变量的默认初始化(全局变量与类成员变量):定义在所有大括号外面的全局变量会被默认初始化;另外c++11中,类的数据成员 如果没有人为指定初始值的情况下,会被默认初始化(真体贴~~Java万岁~~)。所有其他情况的变量都不会被默认初始化,一定要注意。


原创粉丝点击