01 2022 档案
摘要:修饰字面常量: const int getval(void) { return 100; } 该函数返回值 const 可有可无。 修饰指针: const int* getptr(void) { int *p = (int *)0xCC; return p; } int main() { const
阅读全文
摘要:折叠表达式(Fold Expression) 折叠表达式是C++17新引进的语法特性。使用折叠表达式可以简化对C++11中引入的参数包的处理,从而在某些情况下避免使用递归。 支持的操作符 折叠表达式支持 32 个操作符: +, -, *, /, %, ^, &, |, =, <, >, <<, >>
阅读全文
摘要:一、成员初始化列表作用 成员初始化列表作用: 让const或引用变量能够初始化 提高构造函数效率 对内置类型(int,bool,char等等)使用无法提高效率。 第一、三点略过不讲,来直接看第二点,先上代码 1 class A 2 { 3 public: 4 A(int i = 0) :m_i(i)
阅读全文
摘要:推断指引(Deduction Guides)是C++17语法。作用是当创建一个模板类时,可以通过 “推断指引 来提供额外地模板参数推断规则,或者修正已有的模板参数推断规则。 Deduction Guides 基本形式如下: deduction-guide: explicit(opt) templat
阅读全文
摘要:在类型推断的时候自动的类型转换是受限制的: 如果调用参数是按引用传递的,任何类型转换都不被允许。通过模板类型参数 T 定义的 两个参数,它们实参的类型必须完全一样。 如果调用参数是按值传递的,那么只有退化(decay)这一类简单转换是被允许的:const 和 volatile 限制符会被忽略,引用被
阅读全文
摘要:1. 在模板定义阶段,模板的检查并不包含类型参数的检查。只包含下面几个方面: 语法检查。比如少了分号。 使用了未定义的不依赖于模板参数的名称(类型名,函数名,......)。 未使用模板参数的 static 2.在模板实例化阶段,为确保所有代码都是有效的,模板会再次被检查,尤其是那些依赖于类型参数的
阅读全文
摘要:C++支持多重继承,若如图所示,BC继承于A,D继承于BC。 若BC继承于A属于public,当创建D时,会创建2个A和1个BCD。当D调用A的成员函数(包括虚函数)时,会产生二义性,不知道应该调用哪个A。 1 class A 2 { 3 public: 4 A() { cout << "const
阅读全文