我正在尝试使用GCC编译器编译以下代码
class Class
{
public:
uInt16 temp;
const uInt32 function() const;
}
inline const uInt32 class::function() const
{
return temp;
}
我收到以下编译器警告
警告:在函数返回类型[-Wignored-qualifiers]时忽略类型限定符
有什么想法可以解决此警告吗?
答案 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