明确默认的复制赋值运算符必须返回MyClass&

时间:2017-08-18 08:55:08

标签: c++ c++11 assignment-operator

// Task.h
class Task
{
public:
    Task() = default;
    Task(const Task &) = delete;
    ~Task() = default;
    Task(Task &&) = default;
    const Task & operator= (const Task &) = default;
};


/main.cpp
#include <iostream>
#include "Task.h"

int main()
{
    Task t;
    std::cout<<"hello world"<<std::endl;
    return 0;
}

我在Mac OS上编写c ++代码。当我编译上面的代码:g++ main.cpp时,我得到如下错误:

  

错误:显式默认的复制赋值运算符必须返回&#39;任务   &安培;&#39;

我根本不懂。 operator=只能在这里返回非const引用吗?我在Windows中执行了相同的代码,它没有任何错误。那么Mac OS有一些特殊的c ++标准吗?

1 个答案:

答案 0 :(得分:0)

问题在于我使用= default http://en.cppreference.com/w/cpp/language/copy_assignment

如果使用= default,则返回类型必须是非const引用。如果我们这样编码:const Task & operator= (const Task &t){},它的工作没有任何错误。