• C++ 类型转换


    C++ 类型转换

    在本文中,我们将借助示例学习C ++类型转换的基础知识。

    C ++允许我们将一种类型的数据转换为另一种类型的数据。这称为类型转换。

    C ++中有两种类型的类型转换。

    1. 隐式转换

    2. 显式转换(也称为强制类型转换

    隐式类型转换

    由编译器自动完成的类型转换称为隐式类型转换。这种类型的转换也称为自动转换

    让我们看一下隐式类型转换的两个实例。

    示例1:从int转换为double

    1. #include
    2. #include // 查看数据类型
    3. int main() {
    4. // 为num_int分配一个int值
    5. int num_int = 9;
    6. // 声明一个double变量
    7. double num_double;
    8. // 隐式转换
    9. // 将int值分配给num_double变量
    10. num_double = num_int; // 此处,在将int值分配给num_double变量之前,它会由编译器自动转换为double。
    11. std::cout << "num_int =" << num_int << std::endl; // num_int = 9
    12. std::cout << "num_double =" << num_double << std::endl; // num_double = 9
    13. std::cout << "num_int 的数据类型是:" << typeid(num_int).name() << std::endl; // num_int 的数据类型是:int
    14. std::cout << "num_double 的数据类型是:" << typeid(num_double).name() << std::endl; // num_double 的数据类型是:double
    15. return 0;
    16. }

    输出结果

    num_int = 9
    num_double = 9

    在程序中,我们已将int数据分配给double变量。

    num_double = num_int;

    此处,在将int值分配给num_double变量之前,它会由编译器自动转换为double。 这是隐式类型转换的示例。

     

    示例2:自动从double转换为int 

    1. #include
    2. #include // 查看数据类型
    3. int main() {
    4. // 为num_int分配一个int值
    5. int num_int;
    6. // 声明一个double变量
    7. double num_double = 9.999;
    8. // 隐式转换
    9. // 将int值分配给num_double变量
    10. num_int = num_double; // 在此,将double值分配给num_int变量之前,编译器会自动将其转换为int。
    11. std::cout << "num_int =" << num_int << std::endl; // num_int = 9
    12. std::cout << "num_double =" << num_double << std::endl; // num_double = 9.999
    13. std::cout << "num_int 的数据类型是:" << typeid(num_int).name() << std::endl; // num_int 的数据类型是:int
    14. std::cout << "num_double 的数据类型是:" << typeid(num_double).name() << std::endl; // num_double 的数据类型是:double
    15. return 0;
    16. }

    输出结果

    num_int = 9
    num_double = 9.999

    在程序中,我们已将int数据分配给double变量。

    num_double = num_int;

    此处,在将int值分配给num_double变量之前,它会由编译器自动转换为double。 这是隐式类型转换的示例。

    注意:由于int不能有小数部分,因此在上面的示例中,小数点后的数字被截断了。

    转换期间的数据丢失(窄化转换)

            从上面的示例可以看出,从一种数据类型转换为另一种数据类型很容易导致数据丢失。当较大类型的数据转换为较小类型的数据时,会发生这种情况。

    类型转换期间,可能会发生数据丢失

    C ++显式转换

            当用户手动将数据从一种类型更改为另一种类型时,这称为显式转换。这种类型的转换也称为强制类型转换

    我们可以使用三种主要方法在C ++中使用显式转换。他们是:

    1. C类型强制转换(也称为强制转换符号)

    2. 函数表示法(也称为老式c++风格的类型转换)

    3. 类型转换运算符

    C 风格转换 

    顾名思义,这种类型的转换受到C编程语言的青睐。也称为强制转换表示法

    这种样式的语法是:

    (data_type)expression;
    
    1. #include
    2. #include // 查看数据类型
    3. int main() {
    4. // 初始化int变量
    5. int num_int = 9;
    6. // 声明double变量
    7. double num_double;
    8. // 从int转换为double
    9. num_double = (double)num_int;
    10. std::cout << "num_int =" << num_int << std::endl; // num_int = 9
    11. std::cout << "num_double =" << num_double << std::endl; // num_double = 9
    12. std::cout << "num_int 的数据类型是:" << typeid(num_int).name() << std::endl; // num_int 的数据类型是:int
    13. std::cout << "num_double 的数据类型是:" << typeid(num_double).name() << std::endl; // num_double 的数据类型是:double
    14. return 0;
    15. }

    函数样式转换

    我们还可以使用类似符号的函数将数据从一种类型转换为另一种类型。

    这种类型的语法是:

    data_type(expression);
    1. #include
    2. #include // 查看数据类型
    3. int main() {
    4. // 初始化int变量
    5. int num_int = 9;
    6. // 声明double变量
    7. double num_double;
    8. // 从int转换为double
    9. num_double = double(num_int);
    10. std::cout << "num_int =" << num_int << std::endl; // num_int = 9
    11. std::cout << "num_double =" << num_double << std::endl; // num_double = 9
    12. std::cout << "num_int 的数据类型是:" << typeid(num_int).name() << std::endl; // num_int 的数据类型是:int
    13. std::cout << "num_double 的数据类型是:" << typeid(num_double).name() << std::endl; // num_double 的数据类型是:double
    14. return 0;
    15. }

    示例3:类型转换

    1. #include
    2. #include // 查看数据类型
    3. int main() {
    4. // 声明double变量
    5. double num_double = 3.14159;
    6. std::cout << "num_double =" << num_double << std::endl; // num_double = 3.14159
    7. // 从double转换为int的C风格转换
    8. int num_int1 = (int)num_double;
    9. std::cout << "num_int1 =" << num_int1 << std::endl; // num_int = 3
    10. // 从double转换为int的函数样式转换
    11. int num_int2 = int(num_double);
    12. std::cout << "num_int2 =" << num_int2 << std::endl; // num_int = 3
    13. return 0;
    14. }

    输出结果

    num_double = 3.56
    num_int1   = 3
    num_int2   = 3

            我们使用C风格类型转换函数样式转换进行类型转换,并显示结果。由于它们执行相同的任务,因此两者都给我们相同的输出。

  • 相关阅读:
    图片扫描仪第一弹,我实现了一个办公位简笔画
    WebRTC系列-SDP之setLocalDescription(2)
    MySQL - UNION 与 UNION ALL
    深入探索Android Service:多线程环境最佳实践与系统级操作
    【题解】Educational Codeforces Round 82
    玩转数组高级技法,成为JS高手
    中间件是开箱即用的吗?为什么要开发中间件adapter?
    5、Zab协议
    【Java】反射
    在爬虫的时候发现request 中的from data 是一串数据格式
  • 原文地址:https://blog.csdn.net/m0_48241022/article/details/133364748