默认编译器生成引用运算符(在C ++中)?

时间:2013-08-13 05:55:00

标签: c++ compiler-construction reference operator-overloading default

所有作者都写道,默认情况下,编译器会生成

1. the default constructor
2. copy constructor
3. assignment operator
4. destructor

前几天,我的一位朋友邀请参加面试,并告诉他默认情况下,编译器会生成一个函数引用运算符(operator&())。事实上是这样的吗?

1 个答案:

答案 0 :(得分:3)

不,那不是真的。如果没有operator&,则使用核心语言中的那个。

N3485 13.3.1.2 [over.match.oper] / 1-2(强调我的):

  

如果表达式中的运算符的操作数没有类型或枚举类型,则将假定运算符为内置运算符,并根据第5章进行解释。 :由于..*::无法重载,因此这些运算符始终是根据第5章解释的内置运算符。?:不能重载,但规则在本子条款中,用于确定当它们具有类或枚举类型时应用于第二个和第三个操作数的转换(5.16)。 - 后注]

     

如果任一操作数具有类或枚举类型,则可以声明用户定义的操作符函数 来实现此操作符,或者可能需要用户定义的转换来转换操作数到适合内置运算符的类型。 在这种情况下,重载决策用于确定调用哪个运算符函数或内置运算符来实现运算符。

您还可以看到这一点,因为隐式声明的函数被列为“特殊成员函数(第12条),它没有引用operator&