C++学习笔记2

来源:互联网 发布:mac下载软件推荐 编辑:程序博客网 时间:2024/05/21 17:36

这篇文章主要是对C++Primer(5th edition)开头部分(第一章、第二章)一些有意思的内容的探讨。

1.c++的注释/**/遵守“最近配对”的规则,C++ Primer(5th edition)上有一个蛮有意思的例子:

#include<iostream>using namespace std;int main(){cout<<"/*"<<endl;cout<<"*/"<<endl;cout<</*"*/"*/<<endl;cout<</*"*/"/*"/*"*/<<endl; } 


可以说明这个问题,其中第六行是错的。


2.for 循环和while循环没有本质区别,效率上也没有孰优孰劣。

3.endl不只是换行那么简单,它还可以刷新buffer(数据缓冲区),这样就能保证写入流中的数据可以全部输出,相比之下,\n只能换行,不能刷新缓冲区。

4.申明和定义不是一回事。例如:
extern int a;//declaration
int a;//defination
在函数内部对被extern标记的变量赋值会导致错误。

5.变量的作用域(scope)也遵守最近配对的规则。

6.引用不是对象!所以没有“引用的引用”这种说法。(所谓对象指的是类的实体)

7.指针和引用的基本区别在于:指针本身是一个对象,在其生命周期内允许指向其他值;申明指针可以不初始化(虽然很不安全!),但引用必须要初始化。

8.C++11引入了nullptr,那么nullptr,NULL,0有什么区别?
答:C++03对0做了特殊规定:0既可以表示整数,又可以表示空指针常量(null pointer constant),这种二义性会带来一些问题(比如函数重载)。而NULL其实是宏定义的void *指针,C++禁止了void *指针向其他类型的隐式转换,所以NULL其实是宏定义的0。nullptr是C++11为了填这些坑引入的,用来表示“不指向任何对象的指针”,这样void *就可以被理解成“指向未知类型的指针”,而0就是0。

0 0