C/C++ Constants
Possible Duplicate:
const int = int const?
这些关键字组合有什么区别?
1 2 3 4 5 | const int* int const* int* const |
是否可以通过使用指针访问常量的地址来修改其值?
1 2 3 | const int* int const* |
两者都声明指向常量类型
1 | int* const |
声明指向
是否可以通过使用指针访问常量的地址来修改其值?
是的,这是有可能的,但它会导致一个格式不正确的程序显示出一种未定义的行为。
一般来说:
1 | const T === T const |
和
1 | const T * === T const * |
但是
1 | T * const |
使指针变为常量,但不一定是t的内容。
1 | const T * const === T const * const |
将使t的内容和指针本身都成为常量。
至于改变
第三个示例
是的,您可以使用指针更改地址的值,但这样做是未定义的行为,应该避免。
如果你还有其他有关EDCOX1的7个关键字的问题,你应该引用C++ FAQ的const正确部分。
前两个是指向const int的变量指针。指针本身可以更改。如果不放弃const,则无法通过此指针更改int。(但是,它可以通过非常量引用进行修改。)
最后一个是指向变量int的常量指针。如果不放弃const,则无法更改指针本身。可以通过指针更改int。
常量绑定到左边。除非它是最左边的子句,否则在中约束右边。
从右向左读
1 2 3 4 5 6 7 8 9 10 11 | const int* => (const int)* =>"pointer" to"const int" => Pointer can change. => Can't change the value it points at (the int is const) int const* => (int const)* =>"pointer" to"const int" => As above int* const => int (* const) =>"const pointer" to"int" => Can't change the pointer (its const) it always points => at the same things. => You can change the value of the object it points at. |
这可能会有所帮助。这是另一个讨论如何将其分解的部分,这样您就可以看到在各种场景中哪些部分变成了