gpt4 book ai didi

c++ - 是 *this = Ctor();清除对象状态合法有效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:14 25 4
gpt4 key购买 nike

我偶然发现了这段代码来重新建立类不变量:

class Foo {
// some stuff in here
public:
void clear() {
*this = Foo();
//operator=(Foo()); // commented out in favor of the line above
}
};
  • 我假设对 operator= 的调用是合法的并且按预期工作,但会创建一个不必要的临时文件,以防类不可移动。因此,手动分配默认值可能会更有效,如果我们想扩展类,这很麻烦且容易出错。
  • *this = Foo(),如果允许的话,可能会更有效,因为我假设复制省略可以在这里工作(不管类是可移动的)。

所以我的问题是:

  • *this = Foo(); 语句是否合法?如果是,请提供标准引用
  • 什么更有效(前提是第一个要点是正确的)?
  • 如果 Foo 是可移动的。
  • 以防万一。

最佳答案

  • Is the statement *this = Foo(); legal? If yes, please provide a reference to the standard

这是合法的。它遵循可以通过解除引用的指针分配值的标准。

我不认为我们可以在 c++ 标准中找到任何提及这种情况的内容,因为它不是您认为的特殊情况
分配一个取消引用的 *this 指针与任何其他指针一样工作。

  • What is more efficient (providing that the first bullet point is true)?
    • In case Foo is movable.
    • In case it's not.

在效率方面没有差异。任何体面的现代 c++ 编译器都会采用复制省略。

关于c++ - 是 *this = Ctor();清除对象状态合法有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57553929/

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