关于c ++:const int = int const?


const int = int const?

例如,IS

1
int const x = 3;

有效代码?

如果是这样,它的意思是否与

1
const int x = 3;


它们都是有效的代码,并且都是等效的。对于指针类型,尽管它们都是有效代码,但不是等效代码。

声明2个常量:

1
2
int const x1 = 3;
const int x2 = 3;

声明其数据不能通过指针更改的指针:

1
const int *p = &someInt;

声明不能更改为指向其他对象的指针:

1
int * const p = &someInt;


是的,它们是一样的。C++中的规则基本上是EDCOX1(0)适用于其左边的类型。但是,有一个例外,如果将它放在声明的最左边,它将应用于类型的第一部分。

例如,在int const *中,有一个指向常量整数的指针。在int * const中,有一个指向整数的常量指针。你可以把它外推到指向指针的指针上,这样英语可能会变得混乱,但原理是一样的。

另一个关于做一个比另一个的优点的讨论,见我关于这个主题的问题。如果您好奇为什么大多数人使用这个异常,那么stroustrup的这个常见问题条目可能会有所帮助。


是的,完全一样。但是,指针有区别。我的意思是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int a;

// these two are the same: pointed value mustn't be changed
// i.e. 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 i.e. const pointer to value
int * const p3 = &a;

// ...and combination of the two above
// i.e. const pointer to const value
const int * const p4 = &a;


从"有效C++"项目21

1
2
3
4
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只有在涉及指针时才会变得复杂。

1
2
int const * x;
int * const x;

是不同的。

1
2
int const * x;
const int * x;

是一样的。