例如,是
int const x = 3;
有效代码?
如果是,那是否与
相同const int x = 3;
答案 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;
是一样的。