用C ++思考(第1卷)Ch-12 Q-21

时间:2017-06-27 15:31:36

标签: c++ c++11

在经历Bruce Eckel TIC ++时被困在这里

创建一个具有赋值运算符的类 第二个参数,一个具有默认值的字符串 说“op = call。”创建一个分配对象的函数 你的班级到另一个班,并表明你的 正确调用赋值运算符。

这真的有可能吗? C ++是否允许 operator =()具有多个参数?我试过这个:

class X
{
public:
    X& operator=(const X& x, string val = "op=call")  //! error
    {
        // ...
    }
};

int main()
{
    X x1;
    X x2;
    x2 = x1;
}

编译器给出的错误:

[Error] 'X& X::operator=(const X&, std::string)' must take exactly one argument

我认为这不是一个有效的问题,或者它是如何为赋值运算符提供多个参数?

1 个答案:

答案 0 :(得分:1)

Thinking in C ++,Vol 1 的最新版本于2001年出版。自那时起(2003年,2011年和2014年),新版C ++标准已发布三次。

我的猜测是,Eckel在标准中显示出一个漏洞,后来被纠正了。 (或者可能,因为我预先假定的这个漏洞会是一个边缘情况,你的编译器可能只是意外地实现了预期的行为,而不是严格遵循标准)