工具库

functional std::bind std::bind接受一个可调用对象,生成一个新的可调用对象来适应原可调用对象的参数列表。 std::bind将可调用对象与其参数一起进行绑定,绑定后的结果可以使用std::function保存。std::bind主要有以下两个作用: 将可调用对象和其参数绑定成一个...

阅读更多

复制消除

复制消除(copy elision) 复制消除是一种编译器优化技术,它的核心思想是避免不必要的对象复制和移动。 当: 从一个函数返回一个值语义的对象; 函数的参数是一个值语义的对象; 时,通常会发生几次复制或移动操作。这些操作会创建额外的临时对象,并调用构造函数、析构函数等,导致降低程序性能。 ...

阅读更多

初始化

当对象在创建时获得了一个特定的值,我们说这个对象被初始化(initialized)。 这里说的对象特指一块能存储数据并具有某种类型的内存空间。 初始化与赋值的区别: 初始化:为对象申请存储空间,创建新的对象,并赋予其一个初始值。 赋值:是把已经创建的对象的当前值擦除,并以一个新值来替代。 ...

阅读更多

C++关键字-typeid

typeid是一个运算符,用来获取类型信息: 对于基本类型,类型信息指数据的类型。 对于类类型,类型信息指对象所属的类、所包含的成员、所在的继承关系等。 typeid运算符返回std::type_info的引用(std::type_info在头文件typeinfo中定义) 如果表达式的类型是类类型...

阅读更多

C++关键字-x_cast

static_cast static_cast相当于传统的C语言里的强制转换。 主要用于: 用于基本数据类型之间的转换,如把int转换成char,这种转换的安全性需要开发人员来保证。 把空指针转换成目标类型的空指针。 把任何类型的表达式转换成void类型。 用于基类和派生类之间指针或引用的转换。...

阅读更多

C++关键字-thread_local

存储说明符 存储说明符(storage class specifier)是名字的声明语法中的声明说明符序列 的一部分。它与名字的作用域一同控制名字的两个独立性质:它的存储期和它的链接属性。 存储说明符 说明 备注 ...

阅读更多

C++关键字-struct和class

struct和class有很大的相似性。 但是两者最大的区别就在于思想上,一般来说,struct更适合看成是一个数据结构(纯粹的数据对象,POD结构)的实现体,class更适合看成是一个对象的实现体。 1. 默认的访问权限 struct默认的数据访问控制是public的 calss默认的数据访问控制是priva...

阅读更多

C++关键字-noexcept

C++中的异常处理是在运行时而不是编译时检测的。为了实现运行时检测,编译器创建额外的代码,然而这会妨碍程序优化。 在实践中: 一个操作或者函数可能会抛出一个异常; 一个操作或者函数不可能抛出任何异常。 使用noexcept指定函数或操作不会抛出异常,会给编译器更大的优化空间,同时减少运行时开销。 ...

阅读更多