, 因此应该用noexcept修饰移动构造函数
move也有std::move_if_noexcept的版本, 其在当前函数没有noexcept时主动转换为左值应用从而调用拷贝构造版本....引用折叠规则就会将其变为左值引用, 这是std::forward()的核心原理
编译器优化的时候本身就打开了返回值优化功能, 因此返回右值并不是很必要的事
语法扩展
函数前面加上explict可以防止参数发生隐式类型转换..., 用于构造函数和operator中
不要将explict与delete共用, 因为这相当于删去了显式转换版本的函数, 可能会留下默认的隐式转换的实现....X来转换为目标字面类型
但是对于这个操作符的编写有相关的参数限制:
字面值是整型: 参数只能是unsigned long long或const char*, 当unsigned long long无法容纳字面值时会自动转为字符串...而且由于其本质是常量数值的原因, enum成员总是可以被隐式转换为整型, 这很容易导致比较两个不同的枚举名称时出现错误的结果
C++11之前会通过类结构将枚举封装, 并建立新的转换和比较函数覆盖原先的操作