【发布时间】:2011-07-27 01:51:43
【问题描述】:
首先,您可能知道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 应用于关键字左侧的内容(默认情况下?)我猜他们认为添加 "shortcuts" 以以其他方式应用关键字和类型限定符没有害处至少直到声明通过解析 * 或 & 发生更改...
C 中也是这种情况,然后我假设?
【问题讨论】:
-
在宏中总是添加
const在类型之后,例如#define MAKE_CONST(T) T const而不是#define MAKE_CONST(T) const T这样MAKE_CONST(int *)将正确扩展为int * const而不是const int *。 -
我见过这两种样式被称为“east const”和“west const”。
-
@TomAnderson 但实际上应该是“east const”和“const west”。