【问题标题】:Detect (meaningless) assignment to temporary object检测到临时对象的(无意义的)分配
【发布时间】:2016-01-15 01:12:21
【问题描述】:

是否有任何编译器选项允许您在尝试分配给临时对象时收到警告?

例子:

struct S {
    S op() { return S(); }
};

int main() {
    S s;
    s.op() = s; // assign to temporary. Wants to warn here.
}

我知道您可以将op 的返回类型声明为const 以防止出现这种情况,但现在我感兴趣的只是编译器选项。

您可以使用任何流行的现代编译器。

【问题讨论】:

  • 你怎么知道(一般来说)这是没有意义的?分配可能有副作用:Database db; db.SinkValue() = 5;
  • @KerrekSB 假设我只想收到警告。分配无意义 - 不会被考虑。
  • S& operator=(const S&) & = default; 是比返回 const 实例更好的选择
  • @juanchopanza 任何现代:gcc、clang、vc++
  • 所以把它放在你的问题中。

标签: c++ compiler-warnings temporary-objects compiler-options


【解决方案1】:

编译器可能无法分辨有用的副作用。

编译器会发出警告

int test( S & data );

test( S.op());

【讨论】:

  • 那不是有效的 C++,即使某个不应被命名的编译器允许它。
猜你喜欢
  • 1970-01-01
  • 2022-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多