【发布时间】:2011-04-28 10:50:52
【问题描述】:
我有一个类名X,“const X a”和“X const a”有什么区别
【问题讨论】:
我有一个类名X,“const X a”和“X const a”有什么区别
【问题讨论】:
什么都没有。
const 限定符适用于紧靠其左侧的任何内容。如果它的左边没有任何东西,那么它适用于它右边的任何东西。
【讨论】:
const int *a、int *const a和const int *const a是有区别的。
A const x 形式。但是很难说一个比另一个更好(它是那些风格的东西之一)。现在,如果您有一个很棒的理由,我很想听听(所以我也可以使用它)。
T const 而不是 const T 并且我看到了这种风格的潜在好处,但我一直觉得它很尴尬并且不习惯这样写.这很奇怪。
在这种情况下,根本没有区别。
当你有一个指针或一个引用时,一个可能看起来几乎相同的变化是重要的。给定类似的东西:
T * a;
const(或volatile)相对于星号的位置很重要:
T const * a;
T * const a;
第一个说a 是指向const T 的指针(即,您不能修改a 所指的T 对象)。第二个说a 是一个指向(非常量)T 的常量——也就是说,您可以修改a 指向at 的内容,但不能修改指针本身,所以你不能将它指向不同的对象。当然,你也可以两者都做:
T const * const a;
这意味着您不能更改指针本身或它所引用的T 对象。
【讨论】:
如果您使用简单的类型(嵌入式或自定义),那就看个人喜好了。
在使用指针的情况下,有一个简单的通用规则:如果将 const 放在 '*' 之前,则指向的数据是常量,否则指针本身是常量,则不能更改其值。
例如:
const int a=1; // 'a' value can't be changed
const int* q; // the data that 'a' point to is constant
int const* q; // the same
int* const p=&a; // the pointer is constant: const is behind '*'
所以
int b=2;
p = &b; // error: trying to change constant pointer
【讨论】: