C ++ 17标准中引入的[[nodiscard]]属性,如果是


  ……潜在评估的舍弃值表达式……在这种情况下,鼓励实现者发出警告。


资料来源:n4659, C++17 final working draft

cppreference上使用类似的措词,以防“违反”:


  鼓励编译器发出警告。


为什么鼓励使用“鼓励”一词而不是“必需”一词?是否有情况(除了明确地强制转换为void的情况)时,编译器最好不发出警告?在相对安全的要求发出警告的特定情况下,不管怎样(无论是明确声明强制无效),软化标准语言的背后原因是什么?

最佳答案

C ++标准指定了有效C ++程序的行为。这样,它还定义了“有效的C ++程序”的含义。

仅对于格式错误的代码,语法或语义上不正确的代码(即使在某些情况下,也不需要诊断),才需要进行诊断。代码要么格式正确,要么格式错误,并且(通常)显示诊断信息。

因此,“警告”这个主意并不是C ++标准可以识别的或不应该识别的。请注意,即使“鼓励鼓励实现的实施”语句也属于非规范性表示法,而不是合法的行为规范。

10-08 11:55