const int = int const?

例如,是

int const x = 3; 

有效的代码?

如果是这样,是否意味着一样

 const int x = 3; 

它们都是有效的代码,它们都是等效的。 对于指针types,虽然它们都是有效的代码,但不等同。

声明2个常量的整数:

 int const x1 = 3; const int x2 = 3; 

声明一个指针,其数据不能通过指针进行更改:

 const int *p = &someInt; 

声明一个不能改变的指针指向别的东西:

 int * const p = &someInt; 

是的,他们是一样的。 C ++中的规则本质上是const适用于左边的types。 但是,如果将它放在声明的最左边,则会有一个例外,它适用于该types的第一部分。

例如在int const *你有一个指向一个常量的指针。 在int * const你有一个指向一个整数的常量指针。 你可以推断这个指针指向,英文可能会混淆,但原则是相同的。

关于另一方面的优点的另一个讨论,请看我关于这个问题的问题。 如果你很好奇为什么大多数人使用这个例外, 这个 Stroustrup的FAQ条目可能会有所帮助。

是的,那完全一样。 但是,指针有所不同。 我的意思是:

 int a; // these two are the same: pointed value mustn't be changed // ie pointer to const value const int * p1 = &a; int const * p2 = &a; // something else -- pointed value may be modified, but pointer cannot point // anywhere else ie const pointer to value int * const p3 = &a; // ...and combination of the two above // ie const pointer to const value const int * const p4 = &a; 

从“有效的C ++”项目21

 char *p = "data"; //non-const pointer, non-const data const char *p = "data"; //non-const pointer, const data char * const p = "data"; //const pointer, non-const data const char * const p = "data"; //const pointer, const data 

这在意义和有效性上是一样的。

据我所知,const只要涉及指针就会变得复杂。

 int const * x; int * const x; 

是不同的。

 int const * x; const int * x; 

是一样的。