奇异递归模板模式(curiously recurring template pattern,CRTP)是C++模板编程时的一种常见的做法,即把派生类作为基类的模板参数。 一般的形式为 template <class T> struct Base { void interface() { // ... static_cast<T*>(this)->implementation(); // ... } static void static_func() { // ... T::static…
奇异递归模板模式(curiously recurring template pattern,CRTP)是C++模板编程时的一种常见的做法,即把派生类作为基类的模板参数。 一般的形式为 template <class T> struct Base { void interface() { // ... static_cast<T*>(this)->implementation(); // ... } static void static_func() { // ... T::static…
条款01:视C++为一个语言联邦 C++是一种多重范型编程语言,同时支持过程形式,面向对象形式,函数形式,泛型形式,元编程形式的编程方式 C++主要有四种编程风格 C: 以区块、语句、预处理器、内置类型、数组、指针等为主 C with class: 围绕构造函数、析构函数、封装、继承、多态、动态绑定等概念展开 Template C++: 模板以及模板元编程范型 STL: 协调容器、迭代器、算法及函数对象的模板库 C++高效编程规则取决于你使用C++哪一部分 条款02:尽量以const,enum,inline替换 #…
重载 在同一个作用域内 函数名相同 参数不同,可以是数量或类型 其他因素: virtual、static不影响重载 返回值类型不同不影响重载 部分函数类型限定符,如写在成员函数参数列表后的const,影响重载 示例: class A { public: void f(int) {} void f(float) {} void f(int) const {} void f(int, int) {} //int f(int){} //virtual void f(int) {} }; 覆盖 不在同一作用域,即分别位于…
第一章-开始 默认情况下cerr的数据不缓冲,直接输出,所以也无法重定向(p23) clog和cout的数据是会缓冲的(p23) 第二章-变量和基本类型 C++基本数据类型有:算数类型和空类型(p30) 长度问题:书上写的都是为最小尺寸,一般VC的int为32位,long也为32位(p30) 一个表达式中既有无符号数又有有符号数,通常将有符合数转化为无符号数(p34) 以0(零)开头的整数代表8进制,0x开头的整数代表16进制(p35) 字符串字面值的实际长度通常比它的内容多1,如果两个字符串字面值位置紧邻,且仅有…
const的作用是使对象至少在运行期间是常量 首先const并非只有两层,如:const int *const*const*const p=nullptr;其实也无需多的抠概念只要知道哪个const修饰的是哪个对象,它的作用是什么,自然就知道很清楚了 1. 永远从右往左读一个变量声明。 2. const永远修饰const出现地点左边的声明类型。 3. 如果左边没有声明类型,就修饰右边。 举例:const int * const p=nullptr; 红const修饰int * 即p是常量,蓝const 修饰int …