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 编译它时,我收到两个警告,指出两个函数的 return 值被忽略。编译器检测到的两个函数是没有 return 引用的函数,getValue()
和 getPtr()
.
另一方面,当使用GCC 8.1及以上版本编译时,getRef()
也会导致警告。
C++ support table provided by GCC shows that the [[nodiscard]]
attribute is fully supported as of version 7. It also has a white paper.
Appearance of a [[nodiscard]]
call as a potentially evaluated discarded value expression is discouraged unless explicitly cast to void.
那么,这是错误还是我遗漏了什么?
是的,这是一个错误。正如您已经意识到的那样,它已在 GCC 8 中修复。
我使用 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 编译它时,我收到两个警告,指出两个函数的 return 值被忽略。编译器检测到的两个函数是没有 return 引用的函数,getValue()
和 getPtr()
.
另一方面,当使用GCC 8.1及以上版本编译时,getRef()
也会导致警告。
C++ support table provided by GCC shows that the [[nodiscard]]
attribute is fully supported as of version 7. It also has a white paper.
Appearance of a
[[nodiscard]]
call as a potentially evaluated discarded value expression is discouraged unless explicitly cast to void.
那么,这是错误还是我遗漏了什么?
是的,这是一个错误。正如您已经意识到的那样,它已在 GCC 8 中修复。