码迷,mamicode.com
首页 > 编程语言 > 详细

C++知识点整理(一)

时间:2016-06-30 14:22:52      阅读:356      评论:0      收藏:0      [点我收藏+]

标签:

1. 常量折叠(

在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化;

因为编译器在优化的过程中,会把const全部以内容换掉,这个出现在预编译阶段;但在运行阶段,const变量内存中存储的东西可能确实已改变;

 
2.
1 time_t t;
2 t = clock();  // 程序从启动到函数调用占用CPU的时间
3 time(&t);  // 获取系统时间
4 t = localtime();  // 将一个UTC时间转为本地时间

 

3. “深拷贝”:不会拷贝静态成员(

类的静态成员是所有类的实例共有的,存储在全局(静态)区,只此一份,不管继承、实例化还是拷贝都是一份;

 
4. 引用类型的sizeof运算:将得到被引用对象所占空间的大小;
sizeof(char &) = 1;
 
5. 派生类构造函数的“调用顺序”:
1)完成对象所占整块内存的开辟,由系统在调用构造函数时自动完成;
2)调用基类的构造函数完成基类成员的初始化;
3)若派生类中含对象成员、const成员或引用成员,则必须在初始化表中完成其初始化;
4)派生类构造函数体执行;
 
6. STL的“一级容器”:
一级容器指容器元素本身是基本类型,非组合类型,有vector,deque,list;
 
7. “逗号表达式”中间不能为空,必须要有表达式(
 
8. 两个线程并发执行以下代码,假设a是全局变量,初始为1,那么以下输出()是可能的?
void foo() {
    ++a;
    printf("%d ", a);
}

A:3, 2   B:2, 3  C:3, 3  D:2, 2

解析
此题关键点:
(1)两个线程可随时被抢占;
(2)++a和printf不是原子指令,可随时被打断;
(3)函数printf,a作为参数压栈后,a再变换则不会影响输出(printf实际打印的是压栈的参数,是值拷贝的栈变量);
 
9.

C++知识点整理(一)

标签:

原文地址:http://www.cnblogs.com/tanfy/p/5629701.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!