C ++ 17标准中引入的[[nodiscard]]
属性,如果是
……潜在评估的舍弃值表达式……在这种情况下,鼓励实现者发出警告。
资料来源:n4659, C++17 final working draft。
在cppreference上使用类似的措词,以防“违反”:
鼓励编译器发出警告。
为什么鼓励使用“鼓励”一词而不是“必需”一词?是否有情况(除了明确地强制转换为void
的情况)时,编译器最好不发出警告?在相对安全的要求发出警告的特定情况下,不管怎样(无论是明确声明强制无效),软化标准语言的背后原因是什么?
最佳答案
C ++标准指定了有效C ++程序的行为。这样,它还定义了“有效的C ++程序”的含义。
仅对于格式错误的代码,语法或语义上不正确的代码(即使在某些情况下,也不需要诊断),才需要进行诊断。代码要么格式正确,要么格式错误,并且(通常)显示诊断信息。
因此,“警告”这个主意并不是C ++标准可以识别的或不应该识别的。请注意,即使“鼓励鼓励实现的实施”语句也属于非规范性表示法,而不是合法的行为规范。