C++类型转换

1 与C有关的类型转换

#include<iostream>
using namespace std;

int main()
{
    float a = 1.0f;
    // 输出强制转换的结果
    cout << (int)a << endl;
    // 输出地址
    cout << &a << endl;
    // boolalpha表示用true或者false表示输出的结果
    cout << boolalpha << ((int)a == (int &)a) << endl;
	return 0;
}

2 类型转换的应用,存储大小端问题

#include<iostream>
using namespace std;

int main()
{
    unsigned int a = 0xFFFFFFF7;
    unsigned char c = (unsigned char)a;
    char *b = (char *)&a;
    printf("%08x, %08x", c, *b);
	return 0;
}

C++定义了一组内置对象之间的标准转换,在必要时他们被编译器隐式的应用到对象之上:

隐式对象转换发生在下列的几种情况下:

1.在混合类型的算数表达式当中

#include<iostream>
using namespace std;

int main()
{
    int val = 3;
    double dval = 3.14;
    // val在运算之前被提升为double类型
    dval += val;
    cout << dval << endl;  // 6.14
	return 0;
}

2 用一种类型的表达式赋值给另一种类型的对象。

// 0被转换为int*类型的指针
int *pi = 0;
// dval被截取为int类型的数据
val = dval;

3 把一个表达式传递给一个函数,调用表达式的类型与形式参数的类型不相同,在这种情况下目标转换的类型是形式参数的类型。

extern double sqrt(double);
// 2被提升为double类型
sqrt(2);

4 从一个函数返回的表达式类型与函数定义的返回类型不一致

double diff(int val1, int val2)
{
    // 返回值类型被提升为double
    return val1 - val2;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值