Oracle® Solaris Studio 12.4:C++ 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

9.3 使用缺省运算符

如果类定义不声明无参数的构造函数、复制构造函数、复制赋值运算符或析构函数,那么编译器将隐式声明它们。它们都是调用的缺省运算符。类似 C 的 struct 具有这些缺省运算符。编译器生成缺省运算符时,可以了解大量关于需要处理的工作和可以产生优良代码的工作。这种代码通常比用户编写的代码的执行速度快,原因是编译器可以利用汇编级功能的优点,而程序员则不能利用该功能的优点。因此缺省运算符执行所需的工作时,程序不能声明这些运算符的用户定义版本。

缺省运算符是内联函数,因此内联函数不合适时不使用缺省运算符(请参见上一节)。否则,缺省运算符适用于以下情况:

  • 用户编写的无参数构造函数仅为构造函数的基对象和成员变量调用无参数构造函数。有效的基元类型具有“不进行任何操作”的无参数构造函数。

  • 用户编写的复制构造函数仅复制所有的基对象和成员变量。

  • 用户编写的复制赋值运算符仅复制所有的基对象和成员变量。

  • 用户编写的析构函数可以为空。

某些 C++ 编程手册建议编写类的程序员始终定义所有的运算符,以便该代码的任何读者都能了解该程序员没有忘记考虑缺省运算符的语义。显然,该建议与以上讨论的优化有冲突。这种冲突的解决方案是在代码中放置注释以表明类正使用缺省运算符。C++11 允许将上述特殊函数声明为缺省值,表明您没有忘记它们,但不会发生任何开销。