const int = int const?

问题描述 投票:54回答:5

例如,是

int const x = 3;

有效代码?

如果是这样,它是否意味着相同

const int x = 3;

?

c++
5个回答
100
投票

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

声明2个常量的整数:

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

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

const int *p = &someInt;

声明一个无法更改为指向其他内容的指针:

int * const p = &someInt;

31
投票

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

例如,在int const *中,您有一个指向常量整数的指针。在int * const中,你有一个指向整数的常量指针。你可以推断它指向指针,英语可能会让人感到困惑,但原理是一样的。

关于做另一个的优点的另一个讨论,请参阅my question关于这个问题。如果你很好奇为什么大多数人都会使用这个例外,那么Stroustrup的this FAQ entry可能会有所帮助。


17
投票

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

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;

8
投票

来自“Effective 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

3
投票

它的意义和有效性是一样的。

据我所知,const只有在涉及指针时才会变得复杂。

int const * x;
int * const x; 

是不同的。

int const * x;
const int * x; 

是一样的

© www.soinside.com 2019 - 2024. All rights reserved.