Technisch gesehen verhält sich C++ 11 hier nicht sehr anders als Java (was ein typisches Beispiel für eine der "anderen höheren Programmiersprachen" ist, die Sie erwähnen). A falschoverride
wird ein Kompilierungsfehler, genau wie ein falscher @Override
in Java. Ein fehlenderoverride
wird kein Kompilierungsfehler sein, genauso wie ein fehlender @Override
kein Kompilierungsfehler in Java sein wird. Der einzige wirkliche Unterschied, den ich sehen kann, ist, dass Java-Tools traditionell eine bessere Unterstützung haben, um eine fehlende @Override
zu entdecken, und dass Java-Benutzer traditionell dazu ermutigt werden, die entsprechende Warnung als Fehler zu behandeln, während C++ - Compiler ziemlich langsam waren weit zu hinzufügen, Warnoptionen für fehlende override
s.
Aber wir kommen dorthin; Clang hat jetzt -Winconsistent-missing-override
, und neuere GCCs haben -Wsuggest-override
. Alles, was Sie tun müssen, ist diese Warnungen zu aktivieren und sie als Fehler zu behandeln, entweder zwangsweise durch den Compiler oder einfach durch Konvention.
Warum ist es nicht einfach ein Schlüsselwort: Rückwärtskompatibilität mit älterem Code.
Das Hinzufügen von 'override' als Schlüsselwort kann (alte) Codes, die es als Bezeichner verwenden, unterbrechen. – Jarod42
"[override gains] spezielle Bedeutung als Attribute nur dann, wenn sie in bestimmten spezifischen [attributes] Kontexten verwendet wird" – user2864740
Es ist optional, weil viele Leute glauben, dass es mehr Komplikationen verursacht, als es verrechnet. –