gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:16:42 24 4
gpt4 key购买 nike

在 C++ 中为类定义运算符赋值时,我注意到您不需要返回 *this。我在警告级别为 4 的 Visual Studio 2012、Visual Studio 2010 上对此进行了测试,没有任何错误或警告,并且代码按预期工作。然而,在 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;

最佳答案

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

第 6.6.3.2 节

Flowing off the end of a function is equivalent to a return with no value; this results in undefined behavior in a value-returning function

关于C++赋值运算符默认返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17606306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com