0

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

... 可能评估的丢弃值表达式,...,鼓励实现在这种情况下发出警告。

资料来源:n4659,C++17 最终工作草案

在cppreference上使用了类似的措辞,以防“违规”:

鼓励编译器发出警告。

为什么用鼓励这个词而不是要求void是否存在编译器最好不发出警告的情况(显式转换为 除外)?在相对安全的要求无论如何都发出警告的特定情况下软化标准语言的原因是什么(再次,除了,说,明确的强制转换为无效)?

4

1 回答 1

3

C++ 标准规定了有效 C++ 程序的行为。在这样做的过程中,它还定义了“有效的 C++ 程序”的含义。

只有格式错误的代码、语法或语义不正确的代码才需要诊断(即使这样,也有一些格式错误的情况不需要诊断)。代码要么格式正确,要么格式错误并且(通常)显示诊断信息。

因此,“警告”的概念并不是 C++ 标准所承认的,或者是承认的。请注意,即使是“鼓励实现发出警告”声明也是非规范符号,而不是合法的行为规范。

于 2019-08-11T03:47:19.310 回答