首先,您可能知道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中也是这样吧?
发布于 2011-04-01 01:09:43
我更喜欢第二种语法。它帮助我通过从右到左读取类型声明来跟踪“什么”是常量:
Object * const obj; // read right-to-left: const pointer to Object
Object const * obj; // read right-to-left: pointer to const Object
Object const * const obj; // read right-to-left: const pointer to const Object发布于 2011-04-01 01:14:38
关键字在声明中的顺序并不都是固定的。除了“一个真正的顺序”之外,还有很多其他的选择。像这样
int long const long unsigned volatile i = 0;或者应该是
volatile unsigned long long int const i = 0;??
发布于 2011-04-01 01:00:24
第一条规则是使用您的本地编码标准要求的任何格式。之后:当涉及到typedefs时,将const放在前面会导致无休止的混乱,例如:
typedef int* IntPtr;
const IntPtr p1; // same as int* const p1;如果你的编码标准允许类型定义指针,那么它真的应该坚持把const放在类型后面。在任何情况下,但当应用于类型时,const必须遵循它所应用的内容,因此一致性也会在之后支持const。但本地编码指导原则胜过所有这些;这些差异通常不会重要到可以回头更改所有现有代码的地步。
https://stackoverflow.com/questions/5503352
复制相似问题