zoukankan      html  css  js  c++  java
  • C++类型转换

    隐式转换

    显示转换

    C++最新命名的强制类型转换形式如下:

    cast-name <type> (expression);

     type:是转换的目标类型,如果type是引用类型,则结果是左值;

    expression:是要转换的值; 

      cast-name: static_cast、reinterpret_cast、reinterpret_cast和 dynamic_cast;

    旧式的强制类型转换:

    type(expression)     函数形式的强制类型转换

    (type)expression     c语言风格的强制类型转换

    static_cast

    任何具有明确定义的类型转换,不包含底层const(如const int* i=10;),都可以使用static_cast。

      例如:1、可以将j转换为double类型,进行计算。不要忘记()

      int j = 10;
      double slope = static_cast<double>(j) / 3;

              2、将一个较大的算术类型赋值给较小的类型;

              3、利用其找回存在于void*指针中的值:

        double d = 20;
        void* p = &d;
        double* dp = static_cast<double*>(p);
        std::cout << *dp << std::endl;

    当把指针存放在void*中,使用static_cast将其强制转换会原来的类型时,应该确保指针的值保持不变。即确保转换后的所得类型就是指针所指类型。(原值为int 就需要转换为 int*,原值为double就需要转换为 double*)

     

    const_cast

    const_cast只能用来改变预算对象的底层const。

        double c = 3.14;
        const double* pc;
        pc = &c;
        *pc = 1.1;   //不合法
        double* p = const_cast<double*>(pc); 
        *p =3.1415;
        std::cout << *p << std::endl;

    常量转换为非常量的行为,称为“去掉const性质(cast away the const)”。一旦去掉了某个对象的const性质,编译器就不在组织我们对该对象进行写操作了。如果对象本身不是一个常量,使用强制类型转换获得写权限是合法的行为。如果对象时常量,则会法生不确定行为。(不要这么干)

    const_cast常常用于有函数重载的环境中。

     

    reinterpret_cast

    dynamic_cast

     

     

     

     

  • 相关阅读:
    SQLServer学习笔记系列3
    SQLServer学习笔记系列2
    逻辑回归的本质是最大似然估计
    机器学习基石-笔记2-转载
    机器学习基石-笔记1
    Spark核心原理
    Spark编程模型
    一个spark SQL和DataFrames的故事
    Spark Streaming + Kafka 整合向导之createDirectStream
    日志=>flume=>kafka=>spark streaming=>hbase
  • 原文地址:https://www.cnblogs.com/dreammmz/p/13536668.html
Copyright © 2011-2022 走看看