【发布时间】:2018-01-26 21:33:33
【问题描述】:
// 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,我得到如下错误:
错误:显式默认的复制赋值运算符必须返回 'Task &'
我完全不明白。 operator= 只能在这里返回非常量引用吗?我在 Windows 中执行了相同的代码,并且没有任何错误。那么 Mac OS 有一些特殊的 c++ 标准吗?
【问题讨论】:
-
@dlmeetei 我不需要知道非参考的优势。我需要知道为什么我会出错。因为我在 Windows 中执行了相同的代码,而且效果很好。
-
删除
const并且它会起作用,我现在不能说为什么。 -
@Yves,我们想说的是,由于帖子中提到的原因,它是由 C++ 标准规定的。不知道为什么它在 WINdows 上编译
-
@FilipKočica 我也不...
标签: c++ c++11 assignment-operator