繁体   English   中英

GCC 7.3 是否省略了引用返回成员函数的 [[nodiscard]] 属性?

[英]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 中。

错误报告: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80896

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM