const——指针和引用以及复合类型
来源:互联网 发布:魔兽争霸软件 编辑:程序博客网 时间:2024/06/05 00:40
Const与指针:
int a (1024);const int * p1(&a);//p1可以指向不同的对象,对象的内容只能读不可写int * const p2(&a);//p1可以指向唯一的对象,对象的内容可读可写const int * p3(&a);//同上const int * const p4(&a);//p1可以指向唯一的对象,对象的内容只能读不可写int const *const p5(&a);//同上
Const与多级指针:
int *b(&a); int *c(&a);const int **P1(&b);//P1可以指向不同的指针,指向的指针可以指向不同的对象,对象的内容只能读不能写int *const*P2(&b);//P2可以指向不同的指针,指向的指针指向唯一的对象,对象的内容可读可写int **const P3(&b);//P3指向唯一的指针,指向的指针可以指向不同的对象,对象的内容可读可写const int *const*P4(&b);//P4可以指向不同的指针,指向的指针指向唯一的对象,对象的内容只可读不可写const int **const P5(&b);//P5必须指向唯一的指针,指向的指针可以指向不同的对象,对象的内容只能读不能写int *const*const P6(&b);//P6必须指向唯一的指针,指向的指针指向唯一的对象,对象的内容可读可写
const与引用:
(用 const 修饰的引用时为底层引用)
变量可以初始化引用类型,常量(任意表达式,只要其结果能转化成所对应的引用类型即可)可以初始化引用类型(&)和常量引用(const 类型 &)。但常量不能初始化引用类型。
①对于常量可以初始化常量引用类型,一般编译器都会为其分配一个临时量,将这个值保存到临时量中,然后让引用指向这个临时量。
int main(void)
{
const int &b = 1024.1024;
//mov dword ptr[ebp - 18h], 400h
//lea eax, [ebp - 18h]
//mov dword ptr[b], eax
return 0;
}
int main(void)
{
const int temp = 1024.1024;
//mov dword ptr[temp], 400h
const int &b = temp;
//lea eax, [temp]
//mov dword ptr[b], eax
return 0;
}
当编译时,编译器会将const int &b = 1024.1024;编译成两句 const int temp = b;const int &ri = temp;其中temp 是一个临时变量,他用来缓存表达式的求值结果。所以b与临时变量绑定在一起的。同时给b赋值一个变量也是合法的这样就省去了添加临时变量这一步。
即便是 赋值右值也为 引用类型 相对应的类型,也要调用临时量,所以只要是常量 赋值给常量引用,就要调用临时量
const int &a = 12;
const int &b = 4+3;
②对于变量可以初始化常量引用类型来说,除了变量与引用类型相同之外,其他情况也要建立一个临时量。
double D = 1024.1024;
const int &a = D;
//优化成
const int temp = D;
const int &a = temp;
解释 为什么常量不能初始化引用类型,或者,为什么引用类型必须与引用对象类型一致?
如果引用类型不是常量,那么这个引用类型就执行和上述操作一样,这个引用类型将与一个临时变量绑定,由于是引用类型,在后续操作中就会对其取值或者重写操作,然而对一个临时变量进行这些操作是无意义的,所以c++标准将这种行为归为非法。
Const与指针的引用复合类型:
int b(1024), *p1(&b);int * &rp1(p1);//rp1指向一个 int*类型的对象const int* p2(&b);const int* &rp2(p2);//rp2指向一个 const int*类型的对象//const int* &rp2(p1);//error p1为 int* 而rp2指向一个 const int*类型的对象const int* &rp2( const int* (p1) ); int*const p3(&b); int* const &rp3(p3);//rp3指向一个 int*const类型的对象// int* const &rp2(p1);//error p1为 int* 而rp3指向一个 int*const类型的对象 int* const &rp3( int* const(p1));
点击查看 const在c和c++中的不同
- const——指针和引用以及复合类型
- 复合类型——指针和引用
- 关于两种复合类型--引用和指针以及const常量限定符的一些总结
- 复合类型——引用、指针
- 指针和引用、复合类型的声明
- C++复合类型--引用和指针
- C++复合类型:指针和引用
- 2.3复合类型(引用和指针)
- C++基本概念——const与基本类型和类、const与指针、const与引用
- 复合类型 —— 引用
- 第二章 头文件、变量和基本类型(8)——复合类型(引用与指针)
- 【杂记】引用和指针以及const
- 复合类型 —— 指针
- C++primer2.3 复合类型指针和引用
- (7)复合类型(指针和引用)
- const引用和const指针
- const指针和const引用
- const 和 引用 指针
- Lab - Install OpenNMS on Kali Linux
- C#连接SQLServer MySql 代码步骤总结
- iOS9 HTTP 不能正常使用的解决办法
- windows和linux服务器互传文件-使用PSCP
- LA_7401_HDU_5573_BinaryTree
- const——指针和引用以及复合类型
- Gearman 实现分布式处理
- UI界面下视频模式切换(多进程)
- rocketmq3.26研究之六DefaultMQPushConsumer消费流程
- 大数据项目1:客户回复预测与效益最大化
- ZOJ1654 ZOJ那个___不让我过!
- JFinal 中使用 Dubbo —— 1 改造JFinal Demo
- SurfaceView浅析
- 学习博客链接