【问题标题】:explicitly-defaulted copy assignment operator must return MyClass &显式默认的复制赋值运算符必须返回 MyClass &
【发布时间】: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


【解决方案1】:

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

如果使用= default,返回的类型必须是非常量引用。而如果我们像这样编写代码:const Task &amp; operator= (const Task &amp;t){},它可以正常工作。

【讨论】:

  • const Task &amp; operator= (const Task &amp;t){}是无效的顺便说一句,因为您忘记返回。
猜你喜欢
  • 2011-03-07
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 2015-02-25
  • 2019-12-29
相关资源
最近更新 更多