• C++ Tutorials: C++ Language: Other language features: Type conversions


    C++官方参考链接:Type conversions - C++ Tutorials (cplusplus.com)

    类型转换
    隐式转换
    将值复制到兼容类型时,将自动执行隐式转换。例如:
    short a=2000;
    int b;
    b=a;
    在这里,a的值从short提升为int,而不需要任何显式操作符。这被称为标准转换标准转换影响基本数据类型,并允许在数值类型(short到int、int到float、double到int…)、到/从bool和一些指针的转换。 
    从某个较小的整数类型转换为int,或从float转换为double被称为提升,并保证在目标类型中产生完全相同的值。算术类型之间的其他转换可能并不总是能够精确地表示相同的值:
    如果将一个负整数值转换为无符号类型,则结果值对应于其2的补位表示(即,-1成为该类型可表示的最大值、-2为第二大值,…)
    从/到bool类型的转换认为false等效于0(对于数值类型)和空指针(对于指针类型);true等价于所有的其他值,并被转换为等价于1。 
    如果从浮点类型转换为整数类型,则值将被截断(小数点部分被删除)。如果结果不在类型可表示值的范围内,则转换会导致未定义的行为。
    否则,如果转换是在相同类型的数值类型(整数到整数或浮点数到浮点数)之间进行的,则转换是有效的,但值是特定于实现的(并且可能不可移植)。
    其中一些转换可能意味着精度的损失,编译器可以用警告发出信号。通过显式转换可以避免此警告
    对于非基本类型,数组和函数隐式转换为指针,而指针通常允许以下转换:
    空指针(NULL)可以转换为任何类型的指针
    任何类型的指针都可以转换为void指针。
    指针向上转换:指向派生类的指针可以转换为可访问且明确的基类的指针,而无需修改其const或volatile限定。 

    类的隐式转换
    在类的世界中,隐式转换可以通过以下三个成员函数来控制:
    *单实参构造函数:允许从特定类型进行隐式转换以初始化对象。
    *赋值操作符:允许在赋值时从特定类型进行隐式转换。
    *类型强制转换操作符:允许隐式转换到特定类型。 
    例如:
    // implicit conversion of classes:
    #include
    using namespace std;

    class A {};

    class B {
    public:
      // conversion from A (constructor):
      B (const A& x) {}
      // conversion from A (assignment):
      B& operator= (const A& x) {return *this;}
      // conversion to A (type-cast operator)
      operator A() {return A();}
    };

    int main ()
    {
      A foo;
      B bar = foo;    // calls constructor
      bar = foo;      // calls assignment
      foo = bar;      // calls type-cast operator
      return 0;
    }

    类型强制转换操作符使用一种特定的语法:它使用operator关键字,后跟目标类型和一组空括号。注意,返回类型是目标类型&#

  • 相关阅读:
    数据结构--5.2马踏棋盘算法(骑士周游问题)
    大二上学期学习计划
    Python(5):字典
    【linux命令讲解大全】076.pgrep命令:查找和列出符合条件的进程ID
    linux 进程 CPU耗费较高排查
    3d稀疏卷积——spconv源码剖析(四)
    6大优势、2种类型,一文吃透动态应用安全测试(DAST)
    培美曲塞肌白蛋白纳米粒|磺胺地索辛豆清白蛋白纳米粒|茴香酰胺蓖麻蛋白纳米粒(化学品)
    Swift ——协议
    向量数据库库Milvus Cloud2.3 技术选型中性能、成本、扩展性是重点
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126907005