gpt4 book ai didi

c++ - 为什么 [[nodiscard]] 只鼓励编译器发出警告而不要求它?

转载 作者:行者123 更新时间:2023-11-27 23:38:25 25 4
gpt4 key购买 nike

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

... potentially-evaluated discarded-value expression,..., implementations are encouraged to issue a warning in such cases.

来源:n4659, C++17 final working draft .

cppreference 上使用了类似的措辞,如果出现“违规”:

the compiler is encouraged to issue a warning.

为什么使用鼓励而不是要求?是否存在编译器最好不发出警告的情况(除了显式转换为 void)?在相对安全的要求发出警告的特殊情况下软化标准语言的背后原因是什么(再次,除了,比方说,显式转换为 void)?

最佳答案

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

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

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

关于c++ - 为什么 [[nodiscard]] 只鼓励编译器发出警告而不要求它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57446901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com