首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Const之前还是const之后?

Const之前还是const之后?
EN

Stack Overflow用户
提问于 2011-04-01 00:48:23
回答 5查看 74.1K关注 0票数 167

首先,您可能知道const可用于使对象的数据或指针不可修改,或两者兼而有之。

代码语言:javascript
复制
const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer

但是,您也可以使用以下语法:

代码语言:javascript
复制
Object const *obj; // same as const Object* obj;

唯一重要的似乎是你把const关键字放在星号的哪一边。就我个人而言,我更喜欢把const放在类型的左边,以指定它的数据是不可修改的,因为我发现它在我从左到右的思维模式下读起来更好,但是哪种语法先出现呢?

更重要的是,为什么有两种指定const数据的正确方法?在什么情况下,您更喜欢或需要其中一种?

编辑:

因此,这听起来像是一个武断的决定,因为编译器应该如何解释事物的标准在我出生很久之前就已经起草好了。由于const应用于关键字左侧的内容(默认情况下?)我猜他们认为添加“快捷方式”来以其他方式应用关键字和类型限定符没有什么坏处,至少在声明通过解析*或& ...

我猜在C中也是这样吧?

EN

回答 5

Stack Overflow用户

发布于 2011-04-01 01:09:43

我更喜欢第二种语法。它帮助我通过从右到左读取类型声明来跟踪“什么”是常量:

代码语言:javascript
复制
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
票数 76
EN

Stack Overflow用户

发布于 2011-04-01 01:14:38

关键字在声明中的顺序并不都是固定的。除了“一个真正的顺序”之外,还有很多其他的选择。像这样

代码语言:javascript
复制
int long const long unsigned volatile i = 0;

或者应该是

代码语言:javascript
复制
volatile unsigned long long int const i = 0;

??

票数 46
EN

Stack Overflow用户

发布于 2011-04-01 01:00:24

第一条规则是使用您的本地编码标准要求的任何格式。之后:当涉及到typedefs时,将const放在前面会导致无休止的混乱,例如:

代码语言:javascript
复制
typedef int* IntPtr;
const IntPtr p1;   // same as int* const p1;

如果你的编码标准允许类型定义指针,那么它真的应该坚持把const放在类型后面。在任何情况下,但当应用于类型时,const必须遵循它所应用的内容,因此一致性也会在之后支持const。但本地编码指导原则胜过所有这些;这些差异通常不会重要到可以回头更改所有现有代码的地步。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5503352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档