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配合使用
赋值运算符满足右结合律
移位运算符满足左结合律
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》英文第五版阅读笔记(十三)——表达式基本知识
- C++ Primer 学习笔记与思考_9 表达式中过的那些容易忽略的地方
- c++ primer(第五版)学习笔记及习题答案代码版(第四章)表达式
- C++ primer 中文第三版 阅读笔记 第七章
- 《C++ primer》英文第五版阅读笔记(三)——变量
- 《C++ primer》英文第五版阅读笔记(四)——复合类型
- 《C++ primer》英文第五版阅读笔记(九)——string(字符串)类型
- C++ Primer 学习笔记_18_表达式(续2) --new/delete表达式与类型转换
- C++ Primer 学习笔记9 表达式 (求余、自增和自减操作符、箭头操作符、条件表达式、sizeof操作符、逗号操作符)
- C++ Primer 第4版 阅读笔记 13.3:析构函数
- c++ primer阅读笔记-13章-3
- C++ primer第二次阅读学习笔记(第3章)
- c++ primer阅读笔记-15章-5
- c++ primer阅读笔记-12章-2
- 《C++ primer》英文第五版阅读笔记(二十五)——函数基本知识
- C++ primer第二次阅读学习笔记(第4章)
- 《C++ primer》英文第五版阅读笔记(十八)——成员运算符和条件运算符
- 《C++ primer》英文第五版阅读笔记(二十三)——跳转语句
- C++ primer 中文第三版 阅读笔记 第八章
- C++ primer阅读笔记------------字符串,向量和数组