Ich weiß, das ist eine einfache Frage, aber ich habe seit einiger Zeit gegoogelt, und von dem, was ich gefunden habe, verstehe ich immer noch nicht das Problem. Ich habe diesen einfachen Code:verstehe nicht, warum const Qualifizierer verworfen werden
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();
}
ich es zu kompilieren erwarten, weil ich sehe nicht, wie diese Methoden Objekt von X ändern Aber offensichtlich etwas, was ich vermisse, denn:
[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 $
Ich stimme nicht zu - der Rückgabetyp macht keinen Unterschied. Sie können eine ganze Zahl als Referenz zurückgeben, und dann würde die 'const' vollständig Sinn machen. –
@LuchianGrigore ok, Satz neu geschrieben. – LoPiTaL
Diese Antwort kann leicht einen falschen Eindruck vermitteln. Ich stimme nicht ab, da es unter allen vernünftigen Interpretationen nicht inkorrekt ist, aber ich stimme auch nicht zu. –