statisch, constexpr, const - was bedeuten sie, wenn alle zusammen verwendet werden?

8

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?

  • Warum verwenden Sie static, wenn Sie sich bereits in einem anonymen Namespace befinden? Und statische Klassen machen Sinn (es sei denn, du schreibst C ohne Namespaces), ohne Klassen - warum ??
  • warum constexpr verwenden - es gibt keinen Grund, es hier zu verwenden. würde nicht eine einfache const tun?
  • und dann macht 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?

    
hg_git 24.02.2016, 06:53
quelle

1 Antwort

6
  

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.

%Vor%

Ich fand, dass diese Seite auf der "right left" -Regel wirklich hilft, komplizierte Deklarationen zu verstehen .

    
James Root 24.02.2016, 07:16
quelle

Tags und Links