摘要:
template<class... T> void f(T... args){ cout << sizeof...(args) << endl; } sizeof...一整个是运算符 可以通过递归或逗号表达式方式展开该参数包 可以使用这种可变参数模板初始化一个可变长的数组 使用 int arr[] 阅读全文
摘要:
A是个类,B中包含A类的对象 在执行构造函数的时候,如果内部有类对象,使用列表初始化效率会更高 B中的a和b都是A的对象 a是用的列表初始化 b是在构造函数内部初始化 a只会执行一次构造函数,而b则是先执行默认构造函数,再执行一次赋值运算符函数 可以这么理解,只要包含类对象,就会在进入构造函数函数体 阅读全文
摘要:
何时调用赋值函数何时调用拷贝构造函数 String c = a; // 调用拷贝构造函数,最好写成 c(a),构建了一个新的对象c c = b; // 调用赋值函数,此时已有对象c,只是对c进行赋值 阅读全文
摘要:
零拷贝就是一种避免 CPU 将数据从一块存储拷贝到另外一块存储的技术 vector的函数emplace_back() 它跟push_back()函数一样可以将一个元素插入容器尾部 区别在于使用push_back()函数需要调用拷贝构造函数 而使用emplace_back()插入的元素原地构造,不需要 阅读全文
摘要:
###封装 ###继承 ###多态 允许将子类类型的指针赋值给父类类型的指针 ####多态的实现方式 静态多态 重载overload,允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同) 泛型编程,模板之类的 动态多态 覆盖override,子类重新定义父类的虚函数 阅读全文
摘要:
class dog{ int name; public: dog(); void printname(); }; dog::dog(){ cout<<"dog构造"<<endl; }; void dog::printname() { cout<<"dog"<<endl; } int nihao(){ 阅读全文
摘要:
###纠正下英文翻译,一直以为是left right value lvalue:locator value 翻译为左值?可定位的值 rvalue:read value 翻译为右值?可读的值 似乎放在等号左边的叫左值,右边的叫右值? lvaue是指存储在内存中、有明确存储地址(可寻址)的数据,可以通过 阅读全文
摘要:
###主要和深浅拷贝有关 当类对象中包含指针,指针会通过new的方式从堆中申请的空间,在销毁时需要释放对应的内存空间 在调用拷贝构造函数时,对于该指针的拷贝,需要通过深拷贝,即在堆中申请内存的方式来构造一个全新的类对象,避免两个对象的指针指向同一块儿内存区域(浅拷贝) 如果被拷贝的对象即将被释放,或 阅读全文
摘要:
##命名 linux下,动态库以.so结尾,静态库以.a结尾 libxxx.a/libxxx.so gcc链接这些库的时候使用的是该库的名字xxx而不是全称libxxx.a ##静态库制作和使用 ###静态库制作 gcc -c 命令处理.c文件生成.o文件,-c命令表示只编译不链接这些生成的.o文件 阅读全文
摘要:
![](https://img2023.cnblogs.com/blog/1163906/202301/1163906-20230107231822522-300216924.png) 阅读全文