有没有办法防止在不将构造函数分配给变量的情况下调用构造函数?

Is there a way to prevent calling the constructor without assigning it to a variable?

提问人:sberfiacreix 提问时间:5/12/2023 最后编辑:Evgsberfiacreix 更新时间:5/12/2023 访问量:101

问:

即这应该没问题:

Object obj("param");

但这不应该:

Object("param");

有没有办法防止第二种情况发生?

C++ 对象 构造函数 声明

评论


答:

8赞 local-ninja 5/12/2023 #1

可以将 nodiscard 属性用于类型(使用 C++ 17 或更高版本)。

struct [[nodiscard]] Object {};

auto main() -> int {
  Object{}; // error
  return 0;
}

评论

0赞 François Andrieux 5/12/2023
似乎不起作用:godbolt.org/z/jz4EYsaqT
1赞 Richard Critten 5/12/2023
适用于 clang 和 MSVC,gcc 忽略它 - live - godbolt.org/z/Gs5Wrfqez .更新所有 3 个报告构造函数上的属性问题 - 实时 - godbolt.org/z/b6on7h3xd
0赞 Paul Sanders 5/12/2023
我很惊讶这个问题没有得到更多的赞成票
0赞 sberfiacreix 5/12/2023
@PaulSanders我很惊讶我在这里找不到类似的问题/答案,也许我可以改写标题或以更好的方式问它?
0赞 Paul Sanders 5/12/2023
也许“我能否确保,当调用构造函数时,结果被分配给一个变量,而不是简单地丢弃”。嗯,不确定这是否是一种改进。