C++ Primer 复习杂记(第五章)

C++风格的强制类型转换


命名的强制类型转换符号的一般形式如下:

cast-name<type>(expression);

其中,cast-name为以下中的四种操作符之一,type是转换的目标类型,而expression是被强制转换的值,返回为转换后的结果。

1. static_cast

平时使用的编译器隐式执行的任何类型转换都可以通过static_cast执行。
示例:

double d = 97;                          //定义了double型变量d
char ch = static_cast<char>(d);         //类型转换为char
void *ptr = &d;                         //定义了void*型指针指向d
double *dp = static_cast<double*>(ptr); //将void*型指针转为double*型

2. const_cast

const_cast用于去掉变量的const属性
示例:

int main()                       //省略了头文件和using等语句
{
    int i(0);
    const int &j = i;            //定义了i的const型引用。
    const_cast<int&>(j) = 10;    //将j强制转换为int&型,并赋值10。
    cout << i << endl;          //输出可以看到i变为了10。
    system("pause");
    return 0;
}

*注:vs中提示const_cast只能作用在指针,引用,或指向对象类型的指针上。

3. reinterpret_cast

reinterpret_cast提供更低层次的转换(出错的可能更大)。
示例:

int i = 10;
int *ip = &i;
char *pc = reinterpret_cast<char*>(ip);//将int*型指针强制转换为char*型指针。

4. dynamic_cast

将会在以后的博文中介绍

杂项

  • sizeof() 表达式的结果是编译时常量。

  • int型变量的前自增/自减后自增/自减的效率差异能被编译器优化掉。而对迭代器等类型来说,前自增/自减后自增/自减之间的性能差异较为显著。

  • C++中,下式是未定义的行为,因为 求值顺序未知。
 if( ia[index++] < ia[index] ) //undefined
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值