Ich bin total frustriert mit diesen Spezifizierern, weil ich verstehe, was sie tun, wenn sie alleine sind, aber ich finde sie schwer zu verstehen, wenn sie miteinander benutzt werden. Zum Beispiel, einige Code in der Wildnis enthalten -
%Vor%Was macht das überhaupt?
const
tun? const *Hello
keinen Sinn für mich. Was ist hier konstant? Die Zeichenfolgen oder der Zeiger *Hello
? Und das Schlimmste von allem, es kompiliert: /. Natürlich würde es kompilieren, weil sie gültige Aussagen sind, aber was bedeutet das überhaupt?
Warum sollten Sie static verwenden, wenn Sie sich bereits in einem anonymen Namespace befinden?
Ich sehe hier keinen Grund, es sei denn, es ist für C ++ 03 Kompatibilität geschrieben.
Warum
constexpr
verwenden - es gibt keinen Grund, es hier zu verwenden. würde nicht eine einfache const tun?
Auch hier ist es nicht notwendig, aber es zeigt an, dass es sich um eine Kompilierzeitkonstante handelt. Beachten Sie auch, dass constexpr
hier bedeutet, dass der Zeiger constexpr
ist, und die Notwendigkeit von const
nach *
entfernt (siehe nächster Teil).
const *Hello
macht keinen Sinn für mich. Was ist hier konstant? Die Zeichenfolgen oder der Zeiger * Hallo?
const
gilt für die linke Seite, es sei denn, es gibt dort nichts. In diesem Fall gilt es für die rechte Seite. const
links von *
bedeutet der Zeiger, wenn dereferenziert ist eine Konstante, während rechts bedeutet, es ist ein konstanter Zeiger auf etwas.
Ich fand, dass diese Seite auf der "right left" -Regel wirklich hilft, komplizierte Deklarationen zu verstehen .