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

时间:2013-07-12 01:48:24

标签: c++ visual-studio return-value assignment-operator

在C ++中定义类的运算符赋值时,我注意到你不需要返回* this。我在Visual Studio 2012上测试了这个,警告级别为4的Visual Studio 2010并且没有错误或警告,并且代码按预期工作。但是在Visual Studio 2008中,我遇到了一个编译时错误,提示' 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;

2 个答案:

答案 0 :(得分:2)

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

第6.6.3.2节

  

在函数结束时流动等同于返回no   值;这导致值返回函数中未定义的行为

答案 1 :(得分:0)

对于返回非void的函数,返回值不存在是未定义的行为。它可能被允许但并不意味着它符合标准。