C++ 没有小结的小结

来源:互联网 发布:淘宝客微信群名称 编辑:程序博客网 时间:2024/06/06 05:41
1、如何判断一段程序是有C编译程序还是C++编译程序编译
#ifdef __cplusplus
cout<<"c++";
#else
cout<<"C";
#endif

2、对于一个频繁使用的短小函数,在C语言中,用什么实现?在C++中用什么实现?
C用宏定义,C++用inline

3、引用和指针有什么区别?
1) 引用必须初始化,指针不必
2) 应用初始化后不能被改变,指针可以改变所指的对象
3) 不存在指向空值的引用,但是存在指向空值的指针

4、有了malloc/free 为什么还要 new/delete 
malloc/free 是C/C++的标准库函数,而new/delete是运算符,都用于动态分配和释放内存。

但是对于非内部数据类型的对象而言,也就是在面向对象过程中,光用malloc/free 是无法满足动态对象的要求。

因为对象在创建的时候要自动调用构造函数,释放的时候需要自动执行析构函数所以需要/new /delete。

简单来说,new/delete就是为面向对象而产生的。


5、char* const p;    表示p是只读的,将不能再指向其他的值,不能改变指向

6、 用c++写个程序,判断操作系统是32/16位
定义一个指针p,打印sizeof(p),如果是4,表明是32,如果是2,表明16位

7、不用sizeof()函数,如何判断?
int a = int((unsigned int)(~0)>>1);
if (a>65536)
cout<<"32bit"<<endl;
else
cout<<"16bit"<<endl;

8、求int类型值的最大值。
int((unsigned int)(~0)>>1); 
~0把所有位变为1,转换乘无符号数,确保右移是逻辑右移,也就是高位会因为右移空出个0,这样就作出一个最高位(符号位)为0其他位都为1的整数了

9、内存的分配方式有几种?
1)从静态存储区域分配,在程序编译的时候就已经分配好了,例如全局变量
2)在栈上创建,例如局部变量,会自动释放,效率最高,分配的容量有限
3)从堆上分配,亦称动态分配内存,用malloc/new申请任意内存,由程序员负责何时free或delete,使用比较灵活,但问题也最多。

10、使用常量的好处
1)提高了可读性
2)可能会多次使用到该常量,避免了书写错误
3)如果需要修改的话,仅需要修改一处地方即可。

11、空类的大小是1,而不是0,主要是为了确保不同对象的地址不一样。

12、C++ 为什么要使用模板类
1) 可用来创建动态增长或减小的数据结构
2)它是类型无关的,具有很高的可复用性
3)它在编译时就检查数据类型,保证了类型安全
4) 是平台无关的,可移植性
5) 可用于基本数据类型

13、不使用第三方参数的情况下,交换两个数
a = a+b;
b = a-b;
a = a-b;
或是
a = a^b;
b = a^b;
a = a^b;


14、注意: return 语句不能够返回指向“栈内存”的指针或是引用。


2 1