0
これは簡単な質問ですが、私はしばらくの間グーグルで見つけました。 私はこの単純なコードがありますので、私はこれらの方法はX. のオブジェクトを変更する方法を確認していない。しかし、明らかに、私は何かを逃すので、私は、それをコンパイルすることを期待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();
}
を:
[email protected] /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
[email protected] /tmp $
「彼らは整数型であるので、それらは値ではなく、参照することによって返されるので、彼らはconstqualifierを必要としません。」私は同意しません - 戻り値の型は違いはありません。参照によって整数を返すことができます。そして、 'const'は完全な意味を持ちます。 –
@LuchianGrigore大丈夫、文章が書き換えられました。 – LoPiTaL
この回答は間違った印象を簡単に伝えることができます。私はそれがすべての合理的な解釈の下で間違っていないのでdownvotingではないが、私は確かにどちらかをupvotingしていない。 –