C++ primer阅读笔记----------表达式

该博客用于记录自己在阅读过程中不懂的知识点,很少用到但比较重要的知识点以及模棱两可的知识点

赋值运算符满足右结合律

移位运算符满足左结合律

sizeofp; //指针所占空间大小

sizeof*p//指针所指对象类型所占空间大小

sizeof返回一个常量表达式(可以用来声明数组维度)

隐式转换

宏观理解:隐式转换往更宽或更大的类型转换,赋值运算右边的 会往左边转换

boolshortchar等比int小的类型会先提升为int再运算

无符号和带符号运算,如果两类型相同则会转换为无符号,如 果不相同,则依赖于及其两运算对象存在包含与被包含关系,如 果其中无符号的所有值都被带符号的包含,则转换为带符号数, 否则转换为无符号的如:usignedint long都是4个字节,所以 转换为usignedint

3.14L+ 'a'; //'a'先提升为int,再转换为double

其他类型隐式转换

大多使用数组的表达式中数组转换为指向首元素的指针

常量整数值0nullptr可以转换为任意指针

指向任意非常量的指针都能转换为void*

指向任意对象的指针都能转换成constvoid*

转换成bool

允许将非常量的指针和引用转换成相应常量类型的指针和引用

类类型的转换,如:

string s = “aaa”; //字面值转换为string类型

while(cin >> a) //cin转换为bool



强制类型转换:

static_cast

通常情况下使用该方式,例如

1.强制转换为double类型执行浮点除法

2.较大的算术类型转换为较小的算术类型(精度损失)

3.用于一些编译器无法自动执行的类型转换

void*p = &d;

double*rp = static_cast<double*>(p);

const_cast:

改变运算对象的底层const,只有它能改变表达式的const属性

constchar *p1;

char*p2 = const_cast<char *> (p1);

如果p1所指对象为一个常量,通过p2写值是不行的

reinterpret_cast

无关类型之间的转换,重新解释(IBMC++指南C++之父BjarneStroustrupFAQ网页MSDNVisualC++也都指出:错误的使用reinterpret_cast很容 易导致程序的不安全,只有将转换后的类型值转换回到其原始类型,这样才是正确使用 reinterpret_cast方式。IBMC++指南C++之父BjarneStroustrupFAQ网页MSDN VisualC++也都指出:错误的使用reinterpret_cast很容易导致程序的不安全,只有将转换 后的类型值转换回到其原始类型,这样才是正确使用reinterpret_cast方式。)所以该转换 常和hash配合使用





发布了37 篇原创文章 · 获赞 34 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章