const int = int const?

use*_*352 59 c++

例如,是

int const x = 3;
Run Code Online (Sandbox Code Playgroud)

有效代码?

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

const int x = 3;
Run Code Online (Sandbox Code Playgroud)

Bri*_*ndy 105

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

声明2个常量的整数:

int const x1 = 3;
const int x2 = 3;
Run Code Online (Sandbox Code Playgroud)

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

const int *p = &someInt;
Run Code Online (Sandbox Code Playgroud)

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

int * const p = &someInt;
Run Code Online (Sandbox Code Playgroud)

  • 如果定义**反向**,则此处的模式变得明显.例如:`[const int*]`=指向`int`的指针(`*`)是`const`.`[int*const]`=一个`const`指针(`*`)到`int`. (76认同)
  • 无论你做什么,C语法都会变得糟透了.它不是为了生成可读源而设计的.你只需要学习规则. (5认同)
  • @TED:不太好.只是习惯在*适用的东西之后总是*写'const`,你就完成了.(始终跟踪是唯一可以*始终*应用的样式.) (4认同)
  • 你还应该包含'int const*',只是为了笑'int const*const' (4认同)
  • 并且`const int*const p =&someInt;`会给你一个指针,如果我没弄错的话,它不能改变为无法改变的值. (2认同)
  • ** - 1**这种对比具有误导性.如果在类型之前或之后放置`const`,它对指针类型的作用相同.将它移过`*`是另一回事. (2认同)

T.E*_*.D. 32

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

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

关于做另一个的优点的另一个讨论,请看关于这个问题的问题.如果您很好奇为什么大多数人都会使用该例外,那么Stroustrup的这个FAQ条目可能会有所帮助.

  • 正是我在想什么.`const int x`是一种例外形式.`int const x`与`int*const x`的模式相同.如果你需要一个指向常量int的常量指针,我通常把它写成`int const*const`来保持一致性,而不是`const int*const`. (3认同)

Arc*_*hie 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;
Run Code Online (Sandbox Code Playgroud)

  • 这是最完整的答案。 (2认同)

Yua*_*uan 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
Run Code Online (Sandbox Code Playgroud)