重温C++ primer 之const总结

转载 2012年03月31日 13:47:18

1.const变量,即常变量(变量值保持不变,不能被修改)

a.const变量默认时是定义该变量的文件的局部变量
b.非const*指针无法指向const 变量,只有const *指针能指向const 变量。
c.一些const 变量定义在头文件中,const变量通过常量表达式自我初始化时.


2.
A.
a.const T *pstr;指向常对象的指针,简单理解成*pstr不变,即指向的对象不变。这种指针的作用是指向对象时,防止指针对指向的对象进行修改值,起保护对象的值的作用
b.T * const pstr;常指针,简单理解成pstr不变,即指针变量的值不变。这种指针的作用指向该对象后,则只能指向该对象,不能指向其他对象,可以对该对象的值进行修改。
c.const T * const pstr;指向常对象的常指针,简单理解成*pstr不变,pstr不变,即指向的对象不变且指针变量不变。这种指针的作用是指向该对象后,则只能指向在该对象,不能指向其他对象,不可以对该对象的值进行修改。

B.const 指针与非const指针
a.无法从“const T *”转换为“T *”,假如行的话,则会修改该指针指向的对象的值,则不合理,不成立,破坏了const的作用,编译器所以报错
  无法从"const T * const"转换为"T *"

b.非const指针能转换为const指针


3.const 引用
const T &pstr;指向常对象的引用
问题:无法从"const T "转换为"T &";

非const引用只能绑定到与该引用同类型的对象

const引用则可以绑定到不同但相关的类型的对象或绑定右值

4.
A.const 成员函数
     A Object;
  内部调用过程:const A *this=&Object;
              this->该成员函数;
  该函数过程的作用是防止函数被调用后执行过程中某个语句修改了调用该函数的对象的值,其实就是保护调用该函数的对象的值

B.const成员函数与非const成员函数
a.const 成员函数不可以访问非const 成员函数原因是const  *this 指针不能转换为 this指针
b.非const 成员函数可以const 成员函数原因是 this指针能转换为const  *this 指针

5.const 对象,即常对象.
const 对象只能调用const 成员函数,不能调用非const 成员函数。原因就是const对象由const *this指针指向,而不能由非const *this指针指向。
非const对象既能调用非const成员函数,又能调用const 成员函数。非const对象能调用const成员函数的原因就是this指针转换为const *this指针。

6.const对象的动态分配和回收
  与其他常量一样,动态创建的const对象必须在创建时初始化,并且已经初始化,其值就不能再修改。对于类类型的const动态对象,如果该类提供了默认的构造函数,则此对象可隐式初始化。
  内置内型对象或未提供默认构造函数的类类型对象必须初始化。

7.const数据成员

在类中说明const数据成员时,只能通过成员初始化列表的方式来生成构造函数对数据成员初始化。


8.volatile

有些编译程序在编译过程中还改变 表达式的计算顺序,volatile可以防止这些改变的发生。

volatile用法跟const差不多。

重温C++ primer 之const总结

1.const变量,即常变量(变量值保持不变,不能被修改) a.const变量默认时是定义该变量的文件的局部变量 b.非const*指针无法指向const 变量,只有const *指针能指向con...
  • nickwu1220
  • nickwu1220
  • 2014年03月09日 01:21
  • 573

C++ primer 5th 读完的一点心得体会

作为一个通信的研究生,其实我对自己所从事的方向还是有很多迷茫的。本科的时候参加过很多比赛,搞过单片机、ARM嵌入式,做过信号处理,学过matlab,学过C、C++,但是始终觉得自己浮于表面,并没有一种...
  • King_DJF
  • King_DJF
  • 2016年12月18日 10:42
  • 953

c++ primer 第五版的Sales_data类

这个书店程序在c++ primer第五版中可是贯穿了大概两百页(我才看到二百多页)啊,终于看完了。看着书上的代码,终于的写完了Sales_data类,毕竟初学,很多地方不熟悉,写的和书上有些差距,有些...
  • gyhguoge01234
  • gyhguoge01234
  • 2016年03月04日 22:22
  • 598

C++primer 重点总结(important)

(P?)头文件中应该只定义确实需要的东西。(P37)反斜线符号必须是该行的尾字符――不允许其后面有注释或空格。同样,后继行行首的任何空格和制表符都是字符串字面值的一部分,正因如此,长字符串字面值的后继...
  • hlsdbd1990
  • hlsdbd1990
  • 2015年06月24日 10:48
  • 537

C++Primer第五版 7.4节练习

练习7.33:如果我们给Screen添加一个如下所示的size成员将发生什么情况?如果出现了问题,请尝试修改它。 pos Screen::size() const { return he...
  • fengzhanghao23
  • fengzhanghao23
  • 2015年09月16日 07:20
  • 662

C++ Primer阅读心得(第十六章)

1.模板实例化:C++中的模板是一个函数或者类的蓝图,编写了不局限于类型的通用代码。模板定义本身不参与编译,而是编译器根据模板的用户使用模板时提供的类型参数生成代码,再进行编译,这一过程被称为模板实例...
  • lezardfu
  • lezardfu
  • 2016年02月21日 19:02
  • 627

《C++ Primer Plus(第六版)》(47)(总结)

总结: 我是总结完下面的列表,才再回来写总结的,现在看来,这本书的排版还是不错的,由浅入深,很有规律。 其实,一开始我是想看《C++ primer》的,看的是电子版,同学发给我的。结果看了几章后发现是...
  • u012175089
  • u012175089
  • 2017年01月06日 11:25
  • 2318

C++Primer学习之二#define,const,constexpr

一.#define 是预处理操作符(宏定义),编译器将在编译过程中用到该变量的地方替换成对应的值。 二.Const const是声明常量的限定符,它可以约定一个变量为常量。 如: Cons...
  • Jammg
  • Jammg
  • 2016年01月30日 21:15
  • 504

C/C++——const用法完整总结

C/C++——const用法完整总结
  • Linux_ever
  • Linux_ever
  • 2016年05月08日 10:49
  • 1645

《C++ Primer》读书笔记——第六章

6.1.1 在c++中,名字有作用域,对象有生命周期。 局部变量尽在函数的作用域内可见,同时会隐藏外层作用域中同名的其他所有声明。 在所有函数体制外定义的对象存在于程序的整个执行过程中。此类对象在启动...
  • u011389977
  • u011389977
  • 2016年09月11日 10:25
  • 262
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重温C++ primer 之const总结
举报原因:
原因补充:

(最多只允许输入30个字)