总结了cpp const关键字。常见的就不列举了,这里只记录我不会的。
一些我不会的
const修饰成员函数
1 | class A |
static
static全局变量
- 在全局变量前加上 static 关键字,即为静态全局变量
- 静态全局变量在程序的数据区分配内存,若未初始化则默认初始化为0,直到程序结束才销毁
- 静态全局变量在该文件内可见,从变量定义处开始直到文件结束(普通全局变量在同一程序的其他文件中可见,默认是 external 属性,而静态全局变量是 internal 属性), 而在其他文件中不可见
static局部变量
constexpr
const并不能代表“常量”,它仅仅是对变量的一个修饰,告诉编译器这个变量只能被初始化,且不能被直接修改(实际上可以通过堆栈溢出等方式修改)。而这个变量的值,可以在运行时也可以在编译时指定。
constexpr可以用来修饰变量、函数、构造函数。一旦以上任何元素被constexpr修饰,那么等于说是告诉编译器 “请大胆地将我看成编译时就能得出常量值的表达式去优化我”。
template function LNK2019 error
总之,不要把template function分别写在.h和.cpp里
- [Storing C++ template function definitions in a .CPP file](https://stackoverflow.com/questions/115703/storing-c-template-function-definitions-in-a-cpp-file)
- c++模板函数声明定义分离编译错误详解
std::vector内存分配与回收机制
push_back 当前容量已经不能够放入新元素(capacity=size),那么vector会重新申请一块内存,把之前的内存里的元素拷贝到新的内存当中,然后把push_back的元素拷贝到新的内存中,最后要析构原有的vector并释放原有的内存。所以说这个过程的效率是极低的,为了避免频繁的分配内存,C++每次申请内存都会成倍的增长。
所以 vector里元素的地址是会变化的!!!!