为什么[[nodiscard]]只鼓励编译器发出警告,而不要求它?
Why does [[nodiscard]] only encourage compiler to issue a warning and does not require it?
C++17 标准中引入的[[nodiscard]]
属性,在
。潜在评估的丢弃值表达式,...,鼓励实现在这种情况下发出警告。
资料来源:n4659,C++17 最终工作草案。
在cpp 首选项中使用了类似的措辞,在"违规"的情况下:
建议编译器发出警告。
为什么使用">鼓励"一词而不是必需的词?是否存在编译器最好不要发出警告的情况(显式强制转换为void
除外(?在相对安全的特定情况下,软化标准语言的原因是什么,即无论如何都要发出警告(同样,除了,例如,明确无效(?
C++ 标准指定有效C++程序的行为。在这样做时,它还定义了"有效C++程序"的含义。
只有格式不正确的代码、语法或语义不正确的代码才需要诊断(即使这样,也有一些格式不正确的情况不需要诊断(。代码格式正确,或者格式不正确,并且(通常(显示诊断。
因此,"警告"的概念并不是C++标准所承认的,或者意味着要承认的。请注意,即使是"鼓励实现发出警告"语句也是非规范表示法,而不是合法的行为规范。
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 示例C++项目编译中的警告
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 如何修复编译器警告 C6386 和 C6385?
- 返回语句后的代码,没有警告
- 获取隐式转换溢出从无符号到已签名的警告
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 在未链接的部分上生成警告
- 警告 C4552:">>":未使用表达式的结果
- 禁止显示由于常量为零而比较始终为假的警告
- 为什么[[nodiscard]]只鼓励编译器发出警告,而不要求它?
- 自 Visual Studio 15.6.2 编译器更新以来的新 C++17 [[nodiscard]] 警告是否符合标