1 /**
2 const 总是向右结合
3 eg,
4 当和 * 结合的时候表明: 变量的值作为一个地址, 而这个地址所指向的内容是常量.
5 当和变量名结合的时候, 表明这个变量本身的值是一个常量. (如果这个变量是一个指针, 那么变量本身的值是一个地址, 这个地址所指向的内容不一定是常量)
6 (const 和类型结合没有意义)
7 */
8 #include <iostream>
9
10 using namespace std;
11
12 int main(void)
13 {
14 int i = 0;
15 const* int a = &i; // warning C4518: 'int ' : storage-class or type specifier(s) unexpected here; ignored
16 // 这时, a 的类型等同于 int const* (VC 6.0 默认数据类型为 int)
17 const int* b = &i;
18 int const* c = &i;
19 int* const d = &i;
20 const int* const e = &i;
21 char* const pstr1 = "con1"; // "con1" 是一个字符串常量, 由于 pstr1 没有提供存储空间
22 // (如果 pstr1 提供了存储空间, 需要使用 strcpy ),一般的编译器会将 "con1" 存储在常量区, 所以, pstr1 的类型为 const char* const
23 char const pstr2[] = "con2"; // 等同于 const char pstr2[] = "con2";
24 const char pstr3[] = "con3"; // pstr2, pstr3 类型一致, (可以看出 const 不会和类型结合)
25 char pstr4[] = "con4"; // 由于数组名相当于是常指针 (即不能改变自身的值) 所以 实际上 pstr2, pstr3, pstr4 类型一致
26 a++;
27 b++;
28 c++;
29 d++; // error C2166: l-value specifies const object
30 e++; // error C2166: l-value specifies const object
31 *a = 1; // error C2166: l-value specifies const object
32 *b = 1; // error C2166: l-value specifies const object
33 *c = 1; // error C2166: l-value specifies const object
34 *d = 1;
35 *e = 1; // error C2166: l-value specifies const object
36 return 0;
37 }
关键字 const 的含义以及作用:
在 C++ 中 const 意味着常量.
(而在 ANSI C 关键字 const 意味着 "只读" (而不是"常量", 只有 enum 和 define 才能定义"常量"))
const 的作用:
(1), const 能给阅读你代码的人传达非常有用的信息, 能告诉用户这个参数的作用.
(2), 编译器能够对 const 变量产生更紧凑的代码.
(3), 合理的使用 const 可以使编译器保护那些不希望被改变的参数, 防止变量无意间被修改.
原文链接: https://www.cnblogs.com/negro/archive/2013/05/03/3056409.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/86959
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!