不明白为什么const限定符被丢弃了

时间:2016-03-29 09:54:50

标签: c++ const

我知道这是一个简单的问题,但我已经搜索了一段时间,从我发现的我仍然不了解问题。 我有这个简单的代码:

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 $ 

1 个答案:

答案 0 :(得分:4)

您获得的常量错误与函数的const限定符(最后const)无关,而与返回类型的const限定符无关(第一个{ {1}})。

由于它们是整数类型,并且它们是按值返回的,而不是通过引用返回的,因此它们不需要const限定符。这适用于按值返回的所有类型(内置或用户定义)。

因此,您的功能定义应如下:

const