C++赋值运算符默认返回



在C++中定义类的运算符赋值时,我注意到您不需要返回*this。我在Visual Studio 2012和Visual Studio 2010上测试了这一点,警告级别为4,没有任何错误或警告,代码工作正常。然而,在VisualStudio2008中,我遇到了一个编译时错误,说"operator=必须返回一个值"。

我的问题是:这个"特性"是核心C++语言的一部分,还是VS团队决定添加的东西。

如果有人问我这个问题,或者网上有信息,我很抱歉,我找不到任何答案。

template <typename T>
struct singleton
{
T value;
singleton(const singleton& x) : value(x.value) {}
singleton() {}
~singleton() {}
singleton& operator=(const singleton& x) { value = x.value; }
};

这是我用来测试的代码:

singleton<float> sf;
sf.value = 1.9f;
singleton<float> sf2 = sf;
std::cout << sf2.value << std::endl;

在您的示例中,您的问题来自于函数返回singleton&,但实际上您没有返回任何内容(即*this)。该标准认为这是未定义的行为。

第6.6.3.2节

从函数末尾流出相当于没有返回价值这导致了值返回函数中未定义的行为

返回非void的函数没有返回值是未定义的行为。这可能是允许的,但并不意味着它符合标准。

最新更新