2

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

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

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

4

1 回答 1

3

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

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

如果表达式中没有运算符的操作数具有类或枚举类型,则假定该运算符是内置运算符并根据第 5 条进行解释。 [ 注意:因为.,.*::不能被重载,这些运算符始终是根据第 5 条解释的内置运算符。?:不能重载,但是当第二和第三操作数具有类或枚举类型 (5.16) 时,本小节中的规则用于确定要应用于第二和第三操作数的转换。——尾注]

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

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

于 2013-08-13T05:58:06.337 回答