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
- C/C++ 易忽略知识~持续记录
- C语言易忘知识记录复习
- c/c++语言小知识(持续更新)
- C的一些知识【持续更新】
- C语言小知识--持续更新
- C/C++小知识记录
- C/C++ 新学知识记录
- 有意思的记录-C++(持续更新)
- 【C语言】学习笔记,持续记录
- 我们很容易忽略的常用c语言知识
- 我们很容易忽略的c语言知识(二)
- C/C++编程中容易忽略的知识
- C/C++编程中容易忽略的知识
- 学习——C#,碎知识记录
- C语言易忽略点总结
- C# 易忽略的知识
- python的小知识(持续记录)
- [c++]容易忽略的问题
- linux Apache 安装
- 如何理解和熟练运用js中的call及apply
- Ubuntu 安装php+mysql+nginx
- Android设置自定义的keystore调试证书
- UITextField 与键盘 基本设置
- C/C++ 易忽略知识~持续记录
- php进行类似于一元夺宝的用户夺宝唯一号码生成方法
- 3.10 Swift字典的操作 增 删 改 查
- HR:就算频繁跳槽也不是世界末日,干货传授!
- 欢迎使用CSDN-markdown编辑器
- Linux文件系统快照
- 一周环保大事件汇总
- JS中的call、apply、bind方法详解
- SpringMVC log的标准写法