gpt4 book ai didi

C++ 编译错误 - ‘operator=’ 不匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:59 25 4
gpt4 key购买 nike

下面的代码编译没有问题

class MyClass
{
public:
MyClass() { std::cout << "Default Constructor!" << std::endl; }
MyClass& operator=(const MyClass& m) { std::cout << "Copy assignment operator!" << std::endl; }
};

int main()
{
MyClass a;
MyClass d;
d = MyClass(a);
}

但是当我将赋值运算符参数更改为非常量时编译器打印错误:

MyClass& operator=(MyClass& m) { std::cout << "Copy assignment operator!" << std::endl; }

error: no match for ‘operator=’ (operand types are ‘MyClass’ and ‘MyClass’)

我想知道原因。提前致谢。

最佳答案

因为 MyClass& 使没有 constoperator= 不是正确的赋值运算符。它必须是 operator=(const MyClass&)(或 operator=(MyClass) 但不要那样做,除非你知道自己在做什么,copy-&-swap。 ..).

否则,您的代码 d = MyClass(a) 无法编译,因为非常量引用不会绑定(bind)到临时(r 值),例如 MyClass(a).

请注意,即使没有const,像d = a 这样的代码也会编译,因为a 不是 r-value。但是,它仍然不是合适的赋值运算符。

关于C++ 编译错误 - ‘operator=’ 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28380967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com