在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;
答案 0 :(得分:2)
在您的示例中,您的问题来自您的函数返回singleton&
,但您实际上并未返回任何内容(即*this
)。该标准认为这是未定义的行为。
第6.6.3.2节
在函数结束时流动等同于返回no 值;这导致值返回函数中未定义的行为
答案 1 :(得分:0)
对于返回非void的函数,返回值不存在是未定义的行为。它可能被允许但并不意味着它符合标准。