甲乙小朋友的房子

甲乙小朋友很笨,但甲乙小朋友不会放弃

0%

cpp tips

总结了cpp const关键字。常见的就不列举了,这里只记录我不会的。

一些我不会的

const修饰成员函数

1
2
3
4
5
6
class A
{

void function() const; //常成员函数, 它不改变对象的成员变量.
//也不能调用类中任何非const成员函数
}

static

static全局变量

  1. 在全局变量前加上 static 关键字,即为静态全局变量
  2. 静态全局变量在程序的数据区分配内存,若未初始化则默认初始化为0,直到程序结束才销毁
  3. 静态全局变量在该文件内可见,从变量定义处开始直到文件结束(普通全局变量在同一程序的其他文件中可见,默认是 external 属性,而静态全局变量是 internal 属性), 而在其他文件中不可见

static局部变量

constexpr

const并不能代表“常量”,它仅仅是对变量的一个修饰,告诉编译器这个变量只能被初始化,且不能被直接修改(实际上可以通过堆栈溢出等方式修改)。而这个变量的值,可以在运行时也可以在编译时指定。

constexpr可以用来修饰变量、函数、构造函数。一旦以上任何元素被constexpr修饰,那么等于说是告诉编译器 “请大胆地将我看成编译时就能得出常量值的表达式去优化我”。

template function LNK2019 error

总之,不要把template function分别写在.h和.cpp里

  1. [Storing C++ template function definitions in a .CPP file](https://stackoverflow.com/questions/115703/storing-c-template-function-definitions-in-a-cpp-file)
  2. c++模板函数声明定义分离编译错误详解

std::vector内存分配与回收机制

push_back 当前容量已经不能够放入新元素(capacity=size),那么vector会重新申请一块内存,把之前的内存里的元素拷贝到新的内存当中,然后把push_back的元素拷贝到新的内存中,最后要析构原有的vector并释放原有的内存。所以说这个过程的效率是极低的,为了避免频繁的分配内存,C++每次申请内存都会成倍的增长。

所以 vector里元素的地址是会变化的!!!!

  1. c++ vector内存分配与回收机制