C/C++ 易忽略知识~持续记录

来源:互联网 发布:广发淘宝卡申请 编辑:程序博客网 时间:2024/05/22 10:34

以下为个人总结,难免出错,不吝赐教

1) UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。


2) Unicode编码:一个英文或一个中文(含繁体)都等于两个字节,介绍的很详细 // https://www.zhihu.com/question/23374078


3) 1个字节等于8位,一个int是4字节或2个字节与操作系统有关,8086只能处理16位字长,80286以上好像是32位以上了~


4) 引用的作用:1.提高函数传参效率,避免不必要的复制;2.取地址 3.一般与const搭配,保护原有参数的安全,不被修改。4若做函参就不能引用为空


5) 当函数返回一个对象时。可能会调用copyConstructor拷贝构造函数,明白它的原理就行,在先前预留出来的 sizof(对象)个字节的那一小块存储里建立一个临时的、匿名的对象,调不调用copyConstructor,这个视编译器而定,像我测试了一下MinGW的,只调用一次构造,没有调用copy Constructor,难道这就是自带move Constuctor??,用MSVC6.0,就像说的第一种调用Constructor 再调用copy Constructor!


6) const 数据成员只能用初始化表的形式进行初始化,也就是写在构造函数的屁股后面,另外const可作为重载的依据


7) 当类成员 是引用 时为什么 构造函数形参 必须 是引用 如:class Test{ int& n;public:Test(int& i):n(i){ } };


8) STL有6大组成 adapters 适配器,allocators 分配内存啊释放等,algorithms 算法相关的库,containers 容器,function object 作用目标,我理解为作用对象的选择性, iterators 迭代器


9) 在构造函数和析构函数中调用虚函数时,采用静态联编,即所调用的虚函数是基类中定义的虚函数,不是在派生类中重载的虚函数


10) 调用对象的方法 其实是调用指针指向该对象的偏移量!在编译的时候就确定了类中的方法在类的相对位置~


11) 简述数组与指针的区别? 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。

(1)修改内容上的区别
        char a[10] = “hello”; //a就代表hello的头指针,不可更改!!        a[0] = ‘X’;        char *p = “world”; // 注意p 指向常量字符串,p指向'w',指针可更改 你相访问哪个字符都可以,但不能修改        p[1] = ‘X’; // 编译器不能发现该错误,运行时错误 因为world在常量区,不能更改。p[1]表示的就是p指针向后偏移量为1,编译时转换成*(p+1),即p+1再取指针下的的值;
(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量

12) malloc返回的是void 所有要强制转换啊,new 返回的是分配的对象


13) TCP会经历三次握手:一个完整的三次握手也就是 请求—应答—再次确认 !!!四次挥手:请求–应答–应答–再次确认


14) 为什么回溯算法可能导致系统用栈过多呢?因为回溯都是经过进栈操作,而没有出栈操作!!汇编中进栈与出栈数据宽度相同才行~


15) 纯虚函数 声明后时: 函数=0;


16) private继承将会把父亲所有的都变成private:若再继承一次,爷爷的所有方法,孙子都不能用了~ 而protected继承将所有public变成 protected.


17) auto_ptr 即是一种常见的智能指针,调用析构函数的时候 智能指针会删除对象


18) 傻傻分不清楚的指针数组与数组指针:

    指针数组:是一个数组里面全部都是指针        例:int* p[10];因为[]优先级高先与左边结合,int即与*结合,代表数组类型是Int*    数组指针:就是一个数组的首地址即指针,主要用于二维数组吧        例:int(*p)[10];即是p就是指向二维数组的首地址,该数组宽度为10;

19) 虚析构函数作用:在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生


20) void * operator new (unsigned int size){} 用于重载new ,用于只能分配在栈上,不能分配在堆上,要分配在堆上就可以直接把类构造设成private:就好


21) memset();这个函数,使用要小心!一般是对数组等设置初始值为0而使用的!,他会将内存中的每一个字节(Byte)都设置为你指定的值。sizeof()也正是返回的字节总数


22) decltype是C++11出来的东西,是声明类型的意思,泛型编程中结合auto,用于追踪函数的返回值类型,例如:

template <typename _Tx, typename _Ty>auto multiply(_Tx x, _Ty y)->decltype(_Tx*_Ty)//反正是这种用法{    return x*y;}

23) float x与0比较,if(x>=0.000001 && x<=-0.000001)(x不为0的比较)


24) 多用+=或=,少用+,如CString,会产生临时对象



25) new比栈上分配要慢一个数量级,new的话系统要考虑临界区,多线程互斥等,实在要用new,又要效率高,考虑考虑内存池模型方法


更多文章:http://blog.csdn.net/what951006?viewmode=list
powered by:小乌龟在大乌龟背上~

1 0
原创粉丝点击