我知道这是一个简单的问题,但我已经搜索了一段时间,从我发现的我仍然不了解问题。 我有这个简单的代码:
class X {
public:
X() : x_(42) {};
virtual const long long f() const {
return do_f();
}
protected:
virtual const long long do_f() const {
return x_;
}
long long x_;
};
auto main() -> int {
X x;
x.f();
}
我希望它能够编译,因为我不知道这些方法如何修改X的对象。 但显然我想念一些东西,因为:
rakul@lucky-star /tmp $ g++ --std=c++14 -Werror=ignored-qualifiers 1.cpp
1.cpp:6:37: error: type qualifiers ignored on function return type [-Werror=ignored-qualifiers]
virtual const long long f() const {
^
1.cpp:10:40: error: type qualifiers ignored on function return type [-Werror=ignored-qualifiers]
virtual const long long do_f() const {
^
cc1plus: some warnings being treated as errors
rakul@lucky-star /tmp $
答案 0 :(得分:4)
您获得的常量错误与函数的const
限定符(最后const
)无关,而与返回类型的const
限定符无关(第一个{ {1}})。
由于它们是整数类型,并且它们是按值返回的,而不是通过引用返回的,因此它们不需要const
限定符。这适用于按值返回的所有类型(内置或用户定义)。
因此,您的功能定义应如下:
const