c++ 之布尔类型和引用的学习总结!
5、引用的本质:
(1)引用在c++中的内部实现是一个指针常量,比如说说:
Type& name;
void fun(int& a)
{
a=8;
}
等价于:
Type* const name
void fun(int* const a)
{
*a=8;
}
(2)C++编译器在编译过程中用指针变量作为引用的内部实现,因此引用所占用的空间大小与指针相同(可以结合上面的那个例子仔细回忆和理解一下)。
(3)从使用的角度,引用只是一个别名,c++为了实用性而隐藏了引用的存储空间这一细节。
(4)c++中的引用大多数的情况下代替指针:
--功能性:可以满足多数需要使用指针的场合。
--安全性:可以避免由于指针操作不当而带来的内存错误。
--操作性:简单易用,又不失功能强大。
#include <stdio.h>
struct TRef
{
char* before;
char& ref;
char* after;
};
int main(int argc, char* argv[])
{
char a = 'a';
char& b = a;
char c = 'c';
TRef r = {&a, b, &c};
printf("sizeof(r) = %d", sizeof(r));
printf("sizeof(r.before) = %d", sizeof(r.before));
printf("sizeof(r.after) = %d", sizeof(r.after));
printf("&r.before = %p", &r.before);
printf("&r.after = %p", &r.after);
return 0;
}
演示结果:
@txp:/home/txp# ./a.out
sizeof(r) = 24
sizeof(r.before) = 8
sizeof(r.after) = 8
&r.before = 0x7ffdeacc7a00
&r.after = 0x7ffdeacc7a10
再来看一个函数返回引用示例:
#include <stdio.h>
int& func()
{
static int s = 0;
printf("func: s = %d", s);
return s;
}
int main(int argc, char* argv[])
{
int& rs = func();
printf("");
printf("main: rs = %d", rs);
printf("");
rs = 11;
func();
printf("");
printf("main: rs = %d", rs);
printf("");
return 0;
}
演示结果:
root@txp:/home/txp# ./a.out
func: s = 0
main: rs = 0
func: s = 11
main: rs = 11
三、总结:
1、bool的总结:
--bool类型是c++新添加的基础类型。
--bool类型的值只能是true和false。
--c++中的三目运算符可作为左值来使用。
2、引用:
--引用作为变量名而存在旨在代替指针。
--const引用可以使得变量具有可读属性。
--引用在编译器内部使用指针常量实现。
--引用的最终本质为指针。
--引用可以尽可能的避免内存错误。
图片新闻
最新活动更多
-
11月8日立即预约>> 筑梦启光 砺行致远 | 新天激光数字化产研基地奠基仪式
-
即日-11.13立即报名>>> 【在线会议】多物理场仿真助跑新能源汽车
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
11月29日立即预约>> 【上海线下】设计,易如反掌—Creo 11发布巡展
-
11月30日立即试用>> 【有奖试用】爱德克IDEC-九大王牌安全产品
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论