Chinaunix首页 | 论坛 | 博客
  • 博客访问: 420661
  • 博文数量: 62
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 740
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-10 21:59
个人简介

付出,终有回报!

文章分类

全部博文(62)

文章存档

2018年(6)

2017年(24)

2016年(6)

2015年(26)

分类: C/C++

2017-10-25 15:24:16

此处,我们只讨论的是C++99和C89 的标准。

1、C中const的特性

点击(此处)折叠或打开

  1. const int x = 5;
  2. int array[x] = {0}; //错误(在c中常变量不能用做数组下标)
此处,x被称作常变量其本质还是变量,只是不能像常量使用(数组初始化、下标等),不能再作左值。

如下所示:

点击(此处)折叠或打开

  1. int mian()
  2. {
  3.   const int a = 10;
  4.   int *p = &a;
  5.   *p = 20;
  6.   printf("%d,%d\n", a, *p);
  7.   return 0;
  8. }
输出a,*p的值分别为:20,20。此结果证明了,C语言中把const还当做变量进行编译,其值也是可以被改变的。

2、C++中的const

点击(此处)折叠或打开

  1. int main()
  2. {
  3.   const int a = 10;
  4.   int array[a] = {0};

  5.   int *p = (int *)&a;
  6.   *p = 20;
  7.   cout<<a<<" "<<*p<<endl;
  8.   return 0;
  9. }
输出a,*p的值分别为:10,20。
与C中的const对比发现,C++中的const是常量,其必须被初始化,且const 对象一旦创建后其值就不能再改变。在编译时,所有的常量a都将被替换为其初始值10。

注意:
当常量的初始值为变量时,其会退化为常变量。

点击(此处)折叠或打开

  1. int a = 10;
  2. const int b = a;
  3. int arr[b] = {1}; //错误,常变量不能作数组下标

总结:
(1)C中的const是常变量,本质还是变量;C++中的const是常量。
(2)在编译时,C中的const以变量的方式编译;C++中的const以常量的方式编译,凡是出现常量的地方(编译时初始化)均用常量的值来替换
(3)在C++中,当常量的初始值为变量时,其会退化为常变量。

阅读(971) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~