我真的无法理解这里的区别是什么
const int a = 1;
int const a = 1;
我知道常数是什么,但上面的例子让我很困惑。
答案 0 :(得分:7)
没有区别。两者都是一样的。
类型说明符包括
void
,char
,short
,int
,long
,float
,double
,{{ 1}},signed
,unsigned
,_Bool
,_Complex
,<struct-or-union-specifier>
和<enum-specifier>
。每个声明中的声明说明符中应至少提供一个类型说明符,并在每个结构声明和类型名称的说明符限定符列表中指定。每个类型说明符列表应为以下多个集合之一(以逗号分隔,每个项目有多个多集); 类型说明符可以按任何顺序出现 1 ,可能与其他声明说明符混合。
1.Emphasis is mine
答案 1 :(得分:7)
在这个特殊情况下,它们是相同的。
但是,我认为值得注意的是,当指向指针时,的排序很重要:
const int * a; // pointer to constant int
int const * a; // pointer to constant int
int * const a; // constant pointer to int
int const * const a; // constant pointer to constant int
答案 2 :(得分:2)
在您的情况下,这些陈述是同义词。 C中的修饰符适用于左侧说明符,除非没有。当你有指针时,这会更有意义。
int const a;
定义常量变量a
。
int const * a;
定义了一个指向const变量的可修改指针。
int * const a;
定义了一个指向可修改变量的const指针。
答案 3 :(得分:0)
正如其他人所说,你的两个代码示例是相同的。
记住如何解析这些表达式的简单方法是:
const
旁边(两侧)出现 typename ,就像在您的示例中一样,const
会绑定到类型名称。const
将绑定到左侧的第一个指针。例如,int * const p
是指向非常量int
的常量指针,这意味着您可以使用int
写入p
,但无法更改价值p
。
记住类型名称旁边的const
是否绑定到左侧或右侧指针的一种方法是考虑类型int * const p
的表达式是否合法的事实,以及所以此表达式中的const
必须绑定到左侧的指针。你仍然需要记住const
更喜欢指针的类型名。