
Effective C++_第一篇
导读 explicit 将构造函数声明为explicit,禁止编译器执行非预期(不是我们想要的)的类型转换。 除非我们有一个很好的理由,允许构造函数被用来进行隐式类型转换,否则我们应该把它声明为explicit的。 拷贝构造函数&&拷贝赋值操作符 拷贝构造函数被用...
导读 explicit 将构造函数声明为explicit,禁止编译器执行非预期(不是我们想要的)的类型转换。 除非我们有一个很好的理由,允许构造函数被用来进行隐式类型转换,否则我们应该把它声明为explicit的。 拷贝构造函数&&拷贝赋值操作符 拷贝构造函数被用...
静态断言 相关介绍: 预处理宏assert()在标准库头文件cassert中定义。 它可以在程序中测试逻辑表达式。 只要条件(表达式)是false,assert()宏就会调用std::abort(),终止程序。 另外assert()会在标准错误流cerr中显示结果。 静态断言 静...
运算符 符号 非成员 二元算术运算符 + - * / % 是 一元算术运算符 + - 是 按位运算符 ~ & | ^ << >> 是 逻辑运算符 ! && || 是 赋值运算符 = 否 复合赋值运算符 += -= *= /= %= ...
auto用于初始化列表 上述代码,在C++17之前,对于m的类型的推断,编译器给出的结果将不会是我们的预期的。 它会推断为std::initializer_list<int>,而不是int。 同样,下面的代码也是会被推断为std::initializer_list&l...
函数 简述 isupper(c) 测试c是否为大写字母A~Z islower(c) 测试c是否为小写字母a~z isalpha(c) 测试c是否为大写字母或者小写字母 isdigit(c) 测试c是否为数字0~9 isxdigit(c) 测试c是否为是16进制数字0~9、a~f、...
优先级 运算符 相关性 1 :: 左 2 ()、[]、->、 . 左 2 后缀++、后缀-- 左 3 !、 ~ 右 3 一元+、一元- 右 3 前缀++、前缀-- 右 3 寻址&、间接* 右 3 C风格的强制类型转换() 右 3 sizeof 右 3 new、new...
组块分隔符 C++14新增了用单引号表示的组块分隔符。 使用这种语法,可以提高代码的可读性。 二进制字面量 从C++14起,我们可以使用二进制字面量 auto用于推断函数 auto可以被使用来让编译器根据赋值给变量的初始值来推断变量的类型 从C++14起,auto也适用于函数。具...
标准库tuple类模板 tuple是类似pair的模板。 每个pair的成员类型都不相同,但每个pair都恰好有两个成员。 不同tuple类型的成员类型也不相同,但是一个tuple可以有任意数量的成员。 每个确定的tuple类型的成员数目是固定的,但一个tuple类型的成员数目可...
function类模板 C++语言中有几种可调用的对象:函数、函数指针、lambda表达式、bind创建的对象以及重载了函数调用运算符的类。 和其他对象一样,这些可调用的对象,也有自己的类型。 然而,两个不同的可调用对象,却有可能共享同一种调用形式。(调用形式指明了调用返回的类型...
shared_ptr类 简述内存的分配: 静态内存用来保存局部的static对象,类static数据成员,以及定义在函数之外的变量。 栈内存用于保存定义在函数内的非static对象。 分配在静态内存或者栈内存中的对象,由编译器自动创建或销毁。 对于栈对象,仅在其定义的程序块允许时...