您的位置:首页 > 编程语言 > C语言/C++

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

2017-08-02 16:28 204 查看
该博客用于记录自己在阅读过程中不懂的知识点,很少用到但比较重要的知识点以及模棱两可的知识点

赋值运算符满足右结合律

移位运算符满足左结合律

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

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

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

隐式转换

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

bool,short,char等比int小的类型会先提升为int再运算

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

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

其他类型隐式转换

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

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

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

指向任意对象的指针都
4000
能转换成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
无关类型之间的转换,重新解释(IBM的C++指南、C++之父BjarneStroustrup的FAQ网页MSDN的VisualC++也都指出:错误的使用reinterpret_cast很容
易导致程序的不安全,只有将转换后的类型值转换回到其原始类型,这样才是正确使用 reinterpret_cast方式。IBM的C++指南、C++之父BjarneStroustrup的FAQ网页和MSDN
的VisualC++也都指出:错误的使用reinterpret_cast很容易导致程序的不安全,只有将转换
后的类型值转换回到其原始类型,这样才是正确使用reinterpret_cast方式。)所以该转换
常和hash配合使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ primer