const int = int const?
例如,IS
有效代码?
如果是这样,它的意思是否与
?
- 至少在MSVC中
- 编译器说什么?
- @哈米什:有些编译器接受各种各样的无效代码;确保某个代码有效的唯一方法是查看标准或询问。
- 一个是常数整数,另一个是常数整数…-)
- 那么我就不想使用这种编译器了。无论如何,编译器是我的第一道防线。
- 查看这个:c-faq.com/decl/spiral.anderson.html,它应该使阅读声明更加清晰。
它们都是有效的代码,并且都是等效的。对于指针类型,尽管它们都是有效代码,但不是等效代码。
声明2个常量:
1 2
| int const x1 = 3;
const int x2 = 3; |
声明其数据不能通过指针更改的指针:
1
| const int *p = &someInt; |
声明不能更改为指向其他对象的指针:
1
| int * const p = &someInt; |
- 如果我没有错的话,请给你一个指针,指针不能改变价值。
- @Jab:yes it will give you a pointer that can't be changed in addition to have data that can't be changed inside the pointer through that pointer.
- 如果定义被反复阅读,这里的模式就显而易见。例如:[const int *]〔0〕a pointer(*)to an intthat's const指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针指针
- c句法读不懂你在做什么。它不打算产生可实现的来源。你只需要学习规则。
- @T.E.D.:Not quite.只要穿上衣服写下const就行了(总是-trailing is the only style that could be applied consistently.)
- 你还应包括内部控制*,只为一个微弱的内部控制
- @Martin:confusing enough already for some:
- @Brian R.Bondy-they can be quite useful at times though.特别是在系统编程中使用int const *(一个阅读的视图,其他变量或存储器区域)。
- It should also be noted that const int*p=&something,simply bars that pointer from modifying the int,but the int value itself can still be changed.如果有人被宣告为Int=0,而在P之后的某个地方被宣告,那么有人可能会说有人=5,它会被编译和运行而无问题。
- 这是错误的。如果你把const输入到该类型之前或之后,它对指针类型都是一样的。这是另一种高分子物。
是的,它们是一样的。C++中的规则基本上是EDCOX1(0)适用于其左边的类型。但是,有一个例外,如果将它放在声明的最左边,它将应用于类型的第一部分。
例如,在int const *中,有一个指向常量整数的指针。在int * const中,有一个指向整数的常量指针。你可以把它外推到指向指针的指针上,这样英语可能会变得混乱,但原理是一样的。
另一个关于做一个比另一个的优点的讨论,见我关于这个主题的问题。如果您好奇为什么大多数人使用这个异常,那么stroustrup的这个常见问题条目可能会有所帮助。
- 正是我在想的是例外的形式。以int * const x的同样模式如果你需要一个恒定的指针,我通常将它写成int const * const以便比const int * const一致。
- @Cogwheel-Precisely.当你实现const的"正常"形式时,极限的实际使用是一个例外情况,问题的出现如同在长期运行中以实际方式使代码清晰。Hence my question stackoverflow.com/questions/988069/…
- @t.e.d.The rule in C++is essentially that const applies to the type to its left.是否有任何引文是以知识为基础的编程或只是一种理解。另见"Const int*p1"。康斯特的左边什么都没有。如何在这个场景中应用规则。
是的,完全一样。但是,指针有区别。我的意思是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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; |
从"有效C++"项目21
1 2 3 4
| 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 |
- 你的第二个项目是不正确的,它应该读取不const指针,const data。
- 托马斯太慢了(d)固定。给我,这是本书中的一个精确的科目,应该是好的。
其含义和有效性相同。
据我所知,const只有在涉及指针时才会变得复杂。
1 2
| int const * x;
int * const x; |
是不同的。
1 2
| int const * x;
const int * x; |
是一样的。