【发布时间】:2014-08-16 12:04:29
【问题描述】:
这是来自 '03 或 '04 的 C++ 筛选测试。
以下哪项声明了 MyClass 的赋值运算符,使得第 3 行的代码产生编译错误,而第 2 行的代码没有?
考虑以下代码片段:
(Line 1) MyClass a, b, c; (Line 2) a=b=c; (Line 3) (a=b)=c; 1) void operator=( const MyClass& X ); 2) MyClass operator=( const MyClass& X ); 3) const MyClass operator=( const MyClass& X ); 4) None of the above
正确答案是 3)。现在,这是怎么回事?它是如何工作的?什么叫什么? parens 是否强制创建一个临时对象? const 如何参与其中?
【问题讨论】:
-
一个关于 const 正确性和无用 const 返回值(没有引用)的愚蠢问题
-
我非常同意,但我没有做出这种攻击的基础。十一年前我弄错了,我不得不知道我当时的感觉是一个“陷阱”,一个小细节,这让我感到被虐待。我今天和现在遇到了它,我想知道。
-
这是一个人为的情况,但它确实测试了人们对 const、运算符重载和关联性机制的理解程度。也就是说,对他们来说,使用在现实世界中编写实际上有意义的代码示例可能会更好。但也许这就是重点,他们希望你说“正确答案是 3,但这是一个愚蠢的问题。” :)
-
对于加分,为什么在 C++11 中是个坏主意?
-
我建议返回引用而不是副本,即 2) MyClass & operator=( const MyClass& X );和 3) const MyClass & operator=( const MyClass& X );
标签: c++ operator-overloading constants assignment-operator c++03