首先,你可能知道
唯一似乎重要的事情是星号的哪一边放置`const`关键字。个人而言,我更喜欢将`const`放在类型的左侧以指定其数据不可修改,因为在我的从左到右思维方式中读起来更好,但哪种语法先出现呢?
更重要的是,为什么有两种正确的指定`const`数据的方式?在什么情况下你会更喜欢或需要其中一种方法?
编辑:
听起来这似乎是一个任意的决定,在编译器解释事物的标准起草之前就已经存在了,而那时我还未出生。由于`const`应用于关键字左侧(默认情况下?),我猜他们认为在添加"快捷方式"来以其他方式应用关键字和类型限定符时不会造成任何伤害,至少直到声明通过解析`*`或`&`进行更改...
C语言也是这样吗?
const
可以用来使对象的数据或指针不可修改,或者两者都不可修改。const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer
然而,您也可以使用以下语法:
Object const *obj; // same as const Object* obj;
唯一似乎重要的事情是星号的哪一边放置`const`关键字。个人而言,我更喜欢将`const`放在类型的左侧以指定其数据不可修改,因为在我的从左到右思维方式中读起来更好,但哪种语法先出现呢?
更重要的是,为什么有两种正确的指定`const`数据的方式?在什么情况下你会更喜欢或需要其中一种方法?
编辑:
听起来这似乎是一个任意的决定,在编译器解释事物的标准起草之前就已经存在了,而那时我还未出生。由于`const`应用于关键字左侧(默认情况下?),我猜他们认为在添加"快捷方式"来以其他方式应用关键字和类型限定符时不会造成任何伤害,至少直到声明通过解析`*`或`&`进行更改...
C语言也是这样吗?
const
关键字放在类型之后,例如#define MAKE_CONST(T) T const
而不是#define MAKE_CONST(T) const T
,这样MAKE_CONST(int *)
将正确展开为int * const
,而不是const int *
。 - jotik