警告:函数返回类型时忽略类型限定符[-Wignored-qualifiers]

时间:2020-02-14 08:50:38

标签: c++ compilation

我正在尝试使用GCC编译器编译以下代码

class Class
{
public:

uInt16    temp;
const uInt32 function() const;

}

inline const uInt32 class::function() const
{
   return temp;
}

我收到以下编译器警告

警告:在函数返回类型[-Wignored-qualifiers]时忽略类型限定符

有什么想法可以解决此警告吗?

2 个答案:

答案 0 :(得分:4)

简单使用:

uInt32 function() const;

返回const原语类型是没有用的,因为即使没有c.function()++也无法执行const

使用返回的const Object来模仿图元,并禁止类似上面的代码, 但是现在(自C ++ 11起),我们可以完全禁止这样做,如果需要的话:

struct S
{
    S& operator ++() &;
    S& operator ++() && = delete;
};

S f(); // Sufficient, no need of const S f() which forbids move

答案 1 :(得分:2)

返回类型上的const类型限定符无效。实际上,您的function返回了temp的副本。呼叫者将决定此值是否必须为const:

const auto val = Class{}.function(); // here, val is const
auto val = Class{}.function(); // here val is not const

例如,如果您想返回对类成员的引用,则const类型限定符是有意义的。比较:

int f() { /* ... */ } // return int
const int& f() { /* ... */ } // return const reference to an int