C++拾遗

2015-10-24  本文已影响0人  清明小雨

1. 函数调用,参数列表从右往左入栈。而语句从左到右执行

#include <string.h>

int p1(){
    printf("1");
    return 1;
}
int p2(){
    printf("2");
    return 2;
}

int p3(){
    printf("3");
    return 3;
}
int sum(int a,int b,int c){
    return a+b+c;
}

int main(){
    int var = 1;
    printf("%d ",sum(p1(),p2(),p3()));
    printf("%d\n",p1()+p2()+p3());
    return 0;
}

执行结果:3216 1236

2. 大端/小端字节序

3. restrict关键字

修饰指针,用于告知编译器,所有对于指针所指的变量的修改都是通过该指针进行的
注意,这个关键字只用于告知编译器这个假设,编译器并不会对这个假设进行检验,也就是说如果你将这个指针复制了几遍,也不会报错,可以使用C99中的memcpy函数进行检验

4. 类型转化cast

1. const_cast
2. static_cast
3. dynamic_cast
4. reinpreter_cast

5. strcmp与空字符串比较会崩溃,如果某字符串A是另一字符串B的前缀,则A<B

6. extern "C"

7. 动态链接库与静态链接库

8. 常量字符串与变量字符串

    char *c = "hello world";//常量字符串,即使在函数内部定义也存放在全局的常量区
    c[0] = 'a';//错误,常量不可修改

    char c[] = "hello world";//局部变量,在函数内部定义存在在栈中
    c[0] = 'a';

9. 取数组名的地址结果是二维数组

int pt[]={0,1,2,3,4,5};
int *pt2 = (int *)(&pt + 1);
printf("%d",*(pt2-1));

10. 浅拷贝,默认拷贝函数对于指针成员变量进行的是浅拷贝,容易造成对同一块内存的多次析构

11. 必须用初始化列表进行构造的成员变量有

1.const成员
2.引用成员
3.基类构造函数

12. 虚析构函数

13. 类成员初始化顺序

c++ 中类变量的初始化顺序,大体如下:
基类的静态成员初始化;
派生类的静态成员初始化;
基类的对象成员初始化;
基类的构造函数;
派生类的对象成员初始化;
派生类的构造函数;

14. inline放在定义之前

15. 运算符重载的两种方式:成员函数和友元,不改变优先级,结合性,参数个数

16. 虚函数表的内存布局

17. 程序的内存布局

18. int的边界值,unsigned边界值,补码

19. 宏定义与inline的区别

20. 虚构造/析构函数

21. 线程安全的函数如何设计

22. 补码表示

模表示可以表示的数的范围,如int的模式2^31
负数的补码表示 = 模 - 绝对值

to be contiunued...

上一篇 下一篇

猜你喜欢

热点阅读