第4章 表达式

本文解析了C++中的解引用运算符与取地址运算符,展示了它们如何影响变量的引用和地址。讲解了cin与++运算符的潜在问题,以及不同类型的类型转换,如静态_cast、const_cast和reinterpret_cast的应用实例。同时探讨了错误处理,特别是关于指针和类型不匹配的操作。
摘要由CSDN通过智能技术生成

解引用运算符生成左值,所以decltype(*p)的结果是 int &。

取地址运算符生成右值,所以decltype(&p)的结果是 int **。

cin >> v1 >> v2;      //先读入v1,再读入v2

如果表达式指向并修改了同一个对象,将会引发错误并产生未定义的行为。

cout << v1 << ", " << ++v1 <<endl;    //未定义的

cout << 42 + 10;    //+的优先级较高,先进行+输出52

*v1++等价于(v1++)。先将v1加1,返回到初始值,解引用的对象是初始值。*

类型转换

int ival = 3.541 + 3;    //编译器可能会警告该运算损失了精度
3.14159L + ‘a';     //'a'提升成int,然后该int值转换成long double

强制转换

static_cast :任何具有明确定义的类型转换,只要不包括底层const,都可以使用static_cast.

const_cast : 只能改变运算对象的底层const。

reinterpret_cast : 通常为运算对象的位模式提供较低层次上的重新解释。

int *p;
char *pc = reinterpret_cast<char *> (p);

string str(pc); //引发错误

此时pc所指的真实对象式一个int而非字符,如果把pc当成普通的字符指针使用就会引发错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值