C++Primer学习笔记—(const限定符)
来源:互联网 发布:手机道路测量软件 编辑:程序博客网 时间:2024/04/28 18:05
(1)在const创建的对象中需要注意的问题是const对象一旦被创建就无法更改,同时const对象定义是要初始化。
注意定义格式:例:const int limit=10,
错误:const int low,top=30,在这里low并没有初始化;
当然,在编译器会有错误提示。
(2)const对象默认为文件的局部变量(非const对象默认为extern)Exercises Section 2.4:
Exercise 2.22.下种段虽然合法,但是风格很糟糕。有什么问题呢?怎样
改善?
for (int i = 0; i < 100; ++i)
答:100在这里是魔数(magic number),带来两个问题:(1)程序的可读性:无法知道100表示什么,更无法知道为什么i要和100比较;(2)程序的可维护性:假设程序很大,那么100就可能会出现很多次。当然在这些100当中,它们表示的意思或许不同,如果要修改其中某些“100”的时候就会很难确定这些“100”的意思来做出修改。
解决问题的方法是使用变量来初始化常量;
int array_size=100;
for(int i = 0; i < array_size; ++i)
Exercise 2.23:
下列哪些语句合法?对于那些不合法的,请解释为什么不
合法。
(a) const int buf;
(b) int cnt = 0;
const int sz = cnt;
(c) cnt++; sz++;
答:(a)错:const对象无初始化;(c)错,修改了const对象。
提出疑问:
在exercise2.23中的(b)中,先把cnt变量初始化为0,然后在把它作为右值放在const 对象sz的初始化式中,在VC++6.0中,
编写如下代码:
const int limit=10;
int cnt=10;
const int index=limit;
cout<<limit<<endl
<<cnt<<endl
<<index<<endl;
可以看到结果:
如果就这么看的话结果是正确的,但是在调试中,const的值并不是10.得到这样的值是不正确的。
猜想:1.VC++6.0版本太低,无法支持这种const对象的初始化。
2.const对象的这种初始化式本身不正确,或者说属于未定义行为。
为了验证猜想1.在VS2010中输入代码:
可以看到index调试的值仍然和vc6.0调试结果一样。
那么问题是不是猜想2那样呢?
在验证猜想2之前,先说一下一个有趣的现象,如果把const对象放到mian函数之外的话,在vc++6.0中,运行结果也正确,但是在调试中却出现:
而在vs2010中:
在这里的调试中得到了我们想要的结果。可以看到VS确实有优化。
具体原因是什么
二、const引用:用以指向const对象的引用
1,不能将飞const引用绑定到const对象中:
如:const int val=10;
int &valiable=val;错误。
C++primer提到了一个比较有趣的过程:如果编写
double dval=3.14;
const double &ri=dval;
编译器会把代码转换为:
double dval=3.14;
double temp=dval;
const double &ri=temp;
这样的转换有什么事出乎意料的呢,可能就这样还不是很明显。但如果ri并不是一个const引用,那么我们尝试利用ri改变dval的值,可以发现这样是不能够的。
0 0
- C++Primer学习笔记—(const限定符)
- c++primer学习笔记-----2.4const限定符
- 学习笔记:C++primer 2.4 const限定符
- c++primer笔记--2.4const限定符
- C++primer :const限定符
- C++Primer学习札记_指针和const限定符
- C++primer 2.5const限定符(未完)
- C++primer 4.2 指针和const限定符(3)
- c++primer读书笔记:2.4 const 限定符
- 笔记——C++ primer第二章 const限定符
- const限定符学习笔记
- 细嚼慢咽C++primer(1)——指针,void*型指针,const限定符(2)
- C++ Primer学习笔记5 变量和基本类型(const限定符、引用、typedef名字、枚举)
- c++primer 2/22---const 限定符,枚举
- C++ primer学习之const限定符(1)
- C++ primer学习之const限定符(2)
- c++-const限定符
- C++const限定符
- 黑马程序员_多线程
- acer4752g笔记本opensuse 12关闭独立显卡
- 《赢在中国》第三季观后感
- 学习堆小结
- nagios安装简介
- C++Primer学习笔记—(const限定符)
- 赢在中国 第二季 语录
- jquery.autocomplete.js 插件的自定义搜索规则
- 一个对物流监控的粗浅设计
- C++中的静态变量地址探讨
- 删除相同元素(线性表)
- 递归和迭代
- UML_类图
- HDU3371 Connect the Cities