77范文网 - 专业文章范例文档资料分享平台

C++ Primer学习笔记(2)

来源:网络收集 时间:2019-06-05 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

const int ci = 1024; const int &r1 = ci; r1 = 42 ;

//

错误,r1 为常量

int &r2 = ci; //错误,ci为 常量,试图用一个非常量引用指向一个常量引用

初始化和对const的引用

引用的类型必须和其所引用的类型一致。但是有两个例外。???

int i = 42;

const int &r1 = i; //允许将const int& 绑定到一个普通 int 对象上 const int &r2 = 42; // r2 是一个常量的引用 const int &r3 = r1*2; // r3是一个常量的引用 int &r4 = r1*2; //错误,r4 是一个普通非常量的引用

说明:允许为一个常量引用绑定非常量的对象,字面值,或者表达式。

//

double dval = 3.14; const int &ri = dval;

cout<

cout<

说明:ri引用了一个整形的数,对ri的操作应该是整形操作运算,单是dval却是双精度浮点数。中间生成临时变量3,就是对3的常量引用。当通过这个引用改变dval的值时就无法改变,这种引用非法。 2.4.2 指针和const

坚持就是胜利,每天写一点,每天都有一点进步,加油!!!

指向常量的指针------不能更改其所指的对象

// //

const double pi = 3.14; // pi 为一个常量

double *ptr = π //错误,ptr 为 一个普通的指针 (所谓类型一致) const double *cptr = π //cptr 可以指向一个双精度的常量 的指针 *cptr = 42; //错误,不能给 *cptr 赋值

说明:指针的类型必须和所指的类型一致。有两个特列,一种特列情况是:允许另一个指向常量的指针指向一个非常量的对象。

double dval = 3.14; cptr = &dval;

另一种:指向常量的指针也没有也没有规定其所指的对象必须是一个常量。 Const指针

常量指针必须初始化,一但初始化,它里面存放指针的地址就不会改变,一直指向一个对象。

int Num = 0;

int *const p = &Num; // p 一直指向 Num (顶层const) cosnt double pi = 3.14;

const double *const pip = π // pip 是一个指向常量对象的常量指针

说明:指针本身是不是常量并不意味着不能通过指针修改其所指对象的值,能否这样做完全依赖于所指对象的值。 2.4.3 顶层const(需要看P59页)

顶层const(top-level const):指针本身是个常量。 底层const(low-level const):指针所指的对象是一个常量

坚持就是胜利,每天写一点,每天都有一点进步,加油!!!

int i = 0;

int *const p1 = &i;//不能更改p1的值,p1一直指向i(顶层cosnt) cosnt int ci = 42; //不能更改ci,(顶层cosnt) const int *p2 = &ci;//允许改变p2的指向,(底层const)

const int *const p3 = p2;// 靠右的为(顶层const),靠左的为(底层cosnt) const int &r = ci;//用于声明引用的都是底层const

当指向拷贝操作,顶层不受影响

底层受到限制

2.4.4 constexpr 和 常量表达式

常量表达式:在编译过程中就能的计算结果的表达式(字面值,cosnt); Constexpr-----C11规定,允许将变量声明为cosntexpr类型以便由编译器来验证变量的值是不是一个表达式。

注意:声明为cosntexpr的变量一定是个常量,必须使用常量表达式初始化。

constexpr int f = 20; //20 是常量表达式 constexpr int limit = mf + 1; //mf+1是常量表达式

constexpr int sz = size(); //只有当size是一个consexpr函数时才是一个正确的声明语句

指针和constexpr---------------在constexpr声明中如果定义一个指针,限定符constexpr仅仅对指针有效,与指针所指的对象无关:

const int *p = nullptr; constexpr int *q = nullptr;

说明:p是一个指向常量的指针,而q是一个常量指针,其中关键在与constexpr把它定义的对象设置为顶层cosnt.

坚持就是胜利,每天写一点,每天都有一点进步,加油!!!

与其他常量指针类似,constxepr 指针既可以指向常量也可以指向一个非常量。 2.5 处理类型别名 两种方法; 传统方法:typedef

typedef double wages; typedef wages base,*p;

新标准:使用别名声明(alias declaration)

using Si = Sqles_item;

指针.常量和类型别名(这里需要多看,才能理解)

如果某个类型别名指代的是复合类型或者常量,那么把它用到声明语句就会产生意想不到的结果。

typedef char *pstring ; const pstring cstr = 0; const pstring *ps;

说明:两条声明语句的基本类型都是const pstring,const 是对给定类型的修饰。Pstring实际上是指向char 的指针,因此,const pstring 就是指向char的常量指针,而非指向常量字符的指针。

const char *cstr = 0; //是对 const pstring cstr 的错误理解

强调:这种理解错误。声明语句中用到pstring时,其基本数据类型是指针。可是用char*重写了声明语句后,数据类型就成了char,*成了声明符的一部分。 这样改写的结果是,const char成了基本数据类型。前后两种结果截然不同,前者生命了一个指向char的常量指针,改写后的形式则声明了一个指向const

坚持就是胜利,每天写一点,每天都有一点进步,加油!!!

char的指针。

int i =0;

int * const p1 = &i;//这是常量指针,常量指针必须本初始化,始终指向一个对象的地址,

(有点像引用)

针 来修改变量的值

const int j = 0;

const int *const p2 = &i;//指向常量对象的常量指针可以指向普通变量,但也必须初始化 const int *const p3 = &j; //p3是一个指向常量对象的常量指针,只要是常量指针必须被

初始化 // //

//可以通过常量指针修改变量的值,但是不可以令常量指针再指向其他对象 //p2 = &j; //这样就是错误的

const int *p4;//指针常量,可以不必初始化 ,可以指向多个对象 p4 = &i; p4 = &j;

*p4 = 5; //这就是错误的,不能通过指

const text p5 = 0; //错误 , 如果只是简单的认为 把 text 替换成 int *,那就打

错特错了,

const int *p5 ; //正确 ,如果只是简单的认为

坚持就是胜利,每天写一点,每天都有一点进步,加油!!!

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C++ Primer学习笔记(2)在线全文阅读。

C++ Primer学习笔记(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/649256.html(转载请注明文章来源)
上一篇:健康四大基石
下一篇:试卷(附答案)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: