1

在 C++ 中为类定义运算符分配时,我注意到您不需要返回 *this。我在 Visual Studio 2012、Visual Studio 2010 上进行了测试,警告级别为 4,没有错误或警告,代码按预期工作。然而,在 Visual Studio 2008 中,我收到一个编译时错误,提示“operator= must return a value”。

我的问题是:这个“功能”是核心 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;
4

2 回答 2

2

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

第 6.6.3.2 节

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

于 2013-07-12T01:59:37.400 回答
0

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

于 2013-07-12T01:53:11.623 回答