【发布时间】:2019-12-18 04:33:23
【问题描述】:
C++17 标准中引入的[[nodiscard]] 属性,如果是
...可能评估的丢弃值表达式,...,鼓励实现在这种情况下发出警告。
来源:n4659, C++17 final working draft。
cppreference 使用了类似的措辞,以防“违规”:
鼓励编译器发出警告。
为什么使用鼓励这个词而不是必需?是否存在编译器最好不发出警告的情况(除了显式转换为void)?在相对安全的要求无论如何都发出警告的特定情况下软化标准语言的原因是什么(再次,除了,说,明确的强制转换为无效)?
【问题讨论】:
-
C++ 中是否需要 any 警告?
-
@JohnZwinck 非常好。这可能是标准中选择与鼓励\不鼓励警告相关的语言的原因。但现在我显然有一个更笼统的问题。
-
这样做的一件事是允许实现忽略该属性。标准委员会使用的指导方针是,在不改变语义(优化除外)的情况下属性应该可以忽略。
标签: c++ c++17 standards nodiscard wording