[c++ primer plus]常用的const及const的语意
2007-10-22 14:52
260 查看
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
1. const int * p = &x;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
2. int const * p = &x;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
3. void class::function(const class& ref);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
4. void class::function() const;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
5. const class1 class2::function2();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
6. const class2& class2::function2(const class2& ref);
前三种都比较熟悉;
第四种针对“常对象只能调用常成员函数”;
第五种仅针对“消除连环调用”,如:(class2.function2()).function1(),那么function1被执行的前提是:该函数也是const的。对于class2.function2()返回值送出去了的情况,该const限定符是没有意义的,如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const class1 cs1 = class2.function();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
class1 cs1 = class2.function();
第六种针对语意,传入是const&,传出当然也是const&。const从语意上理解就是:只读;在定义(非声明)的时候就必须初使化;作用域在仅在文件。
1. const型形式参数与非const型形式参数,不能作为函数重载的特征标。
2. 返回值是const型与非const型,不能作为函数重载的特征标。
3. 成员函数对于类而言,是不是const型的,可以作为重载的特征标。
是否具备作为重载的特征标,要从语意上分析。
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
void func1(int* p)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
cout << *p << endl;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const int *p = &a;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
int* p1 = p;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
func1(p)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
func1(p1);
6. 利用const在头文件中定义全局变量时,可以把这个头文件包含到多个其它.cpp文件中(可见,const的作用域仅限于单个cpp文件)。
7. 成员变量类型static const 、static、const的差别
static型为类共有,存储在对象之外。只能在类外初使化,不能在声明时初使化。这是因为被static声明的类静态数据成员,其实体远在main()函数开始之前就已经在全局数据段中诞生了(见《Inside The C++ Object Model》page247)!其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,如果你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?难道类永远不被实例化,我们就永远不能访问到被初始化的静态数据成员吗? 所以为了满足C++的static语意,static成员一定要在类外初始化!
const型为对象所有。只能在构造函数中以列表方式初使化。
static const型为类共有。可以在类声明时初使化,因为其是const类型的,所以可以在类内初使化。
相关文章推荐
- c++primer plus第十二章-再谈new定位运算符和返回对象const的引用
- c++ primer plus(chapter 7)const与函数地址
- C++ Primer Plus学习笔记之const修饰指针
- c++ primer plus 第6版 第七章练习题
- c++ primer plus阅读笔记10---定位new using namespace
- C++Primer Plus(第六版) 第七章 第六题
- 《C++ Primer Plus》第17章 输入、输出和文件 学习笔记
- C++ Primer Plus 学习笔记(三)--编程练习6
- c++ primer plus(第6版)中文版 第九章编程练习答案
- c++ primer plus阅读笔记12---手动调用析构函数
- c++primerplus(第六版)编程题——第6章(分支语句和逻辑运算符)
- C++ Primer Plus习题5-6:c++中.和->的区别
- C++ Primer plus第6版第10章学习笔记
- 《C++ Primer Plus》学习笔记2
- 《C++ Primer Plus》Ch04笔记
- C++ Primer Plus 6书后习题 第4章
- 【学习C++】C++ Primer Plus (第六版)第八章编程练习1-7
- C++ primer plus第六版课后编程练习答案:7.1
- C++ primer plus(一)预备知识
- C++ Primer Plus 学习笔记(第六章)