![](/img/trans.png)
[英]Is GCC correct to ignore the nodiscard attribute on overridden member functions?
[英]Does GCC 7.3 omit the [[nodiscard]] attribute for reference returning member functions?
我有以下代码利用 C++17 的[[nodiscard]]
属性。
class SomeClass {
public: /** Methods **/
[[nodiscard]] int getValue() { return n; }
[[nodiscard]] int &getRef() { return n; }
[[nodiscard]] int *getPtr() { return &n; }
private: /** Members **/
int n{5};
};
int main()
{
SomeClass object;
object.getValue();
object.getRef();
object.getPtr();
return 0;
}
当我用GCC 7.3编译它时,我收到两条警告,指出两个函数的返回值被忽略。 编译器检测到的两个函数是不返回引用的函数, getValue()
和getPtr()
。
另一方面,当使用GCC 8.1及以上版本编译时, getRef()
也会导致警告。
GCC 提供的C++ 支持表显示[[nodiscard]]
属性从版本 7 开始完全支持。它还有白皮书。
除非显式转换为 void,否则不鼓励将
[[nodiscard]]
调用显示为潜在评估的丢弃值表达式。
那么,这是一个错误还是我遗漏了什么?
是的,这是一个错误。 正如您已经意识到的那样,它已修复在 GCC 8 中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.