c++学习笔记小记(12)

sizeof运算符

sizeof运算符返回一条表达式或者一个类型所占的字节数

对数组执行sizeof运算符得到整个数组所占空间的大小,等价于对数组中的每个元素各执行一次sizeof并求和

对string对象或者vector对象执行sizeof运算只返回该类型固定部分的大小

对引用执行sizeof返回被引用对象所占空间大小

对指针执行sizeof运算得到指针本身所占空间大小

对解引用执行sizeof运算得到指针所指对象所占空间的大小,指针不需要有效


sizeof(i)/sizeof(*i);  返回数组中i中元素数量

逗号运算符

逗号运算符含有两个运算对象,按照从左到右的顺序依次求值

逻辑与 逻辑或 条件运算符都规定了运算顺序


类型转换

int i = 3.1415 + 3;  //先计算3.1415+3,最后将6.1415的小数部分舍去,赋值给i

隐式转换:

表达式中,比int类型小的转换为int类型

条件中,非bool类型转换为bool类型

初始化时,初始值转换成变量的类型;赋值中,右侧对象转换为左侧类型


算数运算过程中,小于int类型的变量都会被提升为int,若是有double类型,计算过程中都为转为double。


有符号和无符号类型的转换:无符号类型不小于带符号类型,带符号类型转换为无符号类型;无符号类型的所有值都能存在带符号类型中,则无符号转换成带符号,否则,带符号转换成无符号。


强制类型转换

static_cast  //只要不包含底层const,都可以使用static_cast

int i,j;

double s = static_cast<double>(i) / j;  //正确

当需要把较大的类型转换为较小的类型时,使用static_cast显示转换,编译器不会发出警告


将void*指针转换回来时,使用static_cast比较安全

void *p = &d;

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

const_cast  //只能改变运算对象的底层const,不能使用const_cast改变表达式的类型

const char *pc;

chat *p = const_cast<char*>(pc);    //正确,通过p写值是未定义的行为

chat *p = const_cast<string>(pc);  //错误,不能改变类型

static_cast<string>(cp);    //正确   

尽量限制强制类型转换的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值