明确默认的复制赋值运算符必须 return MyClass &
explicitly-defaulted copy assignment operator must return MyClass &
// 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
,我得到如下错误:
error: explicitly-defaulted copy assignment operator must return 'Task
&'
完全不明白。 operator=
只能 return 非常量引用吗?我在 Windows 中执行了相同的代码,并且没有任何错误。所以 Mac OS 有一些特殊的 c++ 标准?
问题是我用= default
.
http://en.cppreference.com/w/cpp/language/copy_assignment
如果使用= default
,return的类型必须是非常量引用。而如果我们这样编码:const Task & operator= (const Task &t){}
,它可以正常工作。
// 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
,我得到如下错误:
error: explicitly-defaulted copy assignment operator must return 'Task &'
完全不明白。 operator=
只能 return 非常量引用吗?我在 Windows 中执行了相同的代码,并且没有任何错误。所以 Mac OS 有一些特殊的 c++ 标准?
问题是我用= default
.
http://en.cppreference.com/w/cpp/language/copy_assignment
如果使用= default
,return的类型必须是非常量引用。而如果我们这样编码:const Task & operator= (const Task &t){}
,它可以正常工作。