const int = int const?

时间:2010-07-14 14:43:28

标签: c++

例如,是

int const x = 3;

有效代码?

如果是,那是否与

相同
const int x = 3;

5 个答案:

答案 0 :(得分:99)

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

声明2个不变的整数:

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

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

const int *p = &someInt;

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

int * const p = &someInt;

答案 1 :(得分:31)

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

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

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

答案 2 :(得分: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;

答案 3 :(得分:7)

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

答案 4 :(得分:3)

它的含义和有效性是相同的。

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

int const * x;
int * const x; 

是不同的。

int const * x;
const int * x; 

是一样的。