类型转换_类型转换错误 - CSDN
精华内容
参与话题
  • 在我们学习c语言的时候,就知道强制类型转换和隐式类型转换,但是在类型转换的过程中,很有可能一个不注意,容易出问题,这无疑是加大了,程序员的工作量,而且还检查很不好检查。 所以在c++ 中就对类型转换做...

    在我们学习c语言的时候,就知道强制类型转换和隐式类型的转换,但是在类型转换的过程中,很有可能一个不注意,容易出问题,这无疑是加大了,程序员的工作量,而且还检查很不好检查。

    所以在c++ 中就对类型的转换做了一定的限制,但是实际中大多数人,是在学习了c 语言后才学习 c++ 语言所以就用了 c 语言中的类型转换方式,那么今天我们介绍一下 c++ 中类型转换的方式,他们都是通过类模板的方式实现

    const_cast 把const强转成非const修饰

    在 c 语言中强转是可以把一个不想关的类型都可以强转,但是这样就很容易出问题,如果我们用了const_cast 如果要把两个两个不相关的类型的const转到非const是不行的。这样就限制了出错的概率,,增强了代码的可读性,但是实际中,大多数还是喜欢采用c语言,但是我们必须得知道。

        const int i = 10;//在c++中这样编译器会优化为寄存器变量用volatile
        int* j = const_cast<int*>(&i); // const 与非 const 转换

    static_cast 隐式类型转换

    什么是隐式类型的转换,隐式类型转换,就像c语言中我们可以把一个整型 int 赋值给一个 float 这就是隐式类型的转换。
    我们简单的写一个例子

    void test()
    {
        int i = 10;
        float j = i; // 在c语言中的隐式类型的转换
    
        // 用static_cast转换
        float j = static_cast<float>(i); 
    }

    这样写增强了代码的可读性

    reinterpret_cast 不相关类型转换

    这强制类型转换是就像 c语言中的强转。
    我们举一个例子:

    typedef void (* FUNC)();
    int DoSomething (int i)
    {
    cout<<"DoSomething" <<endl;
    return 0;
    }
    void Test ()
    {
    //
    // reinterpret_cast可以编译器以FUNC的定义方式去看待 DoSomething函// C++不保证所有的函数指针都被一样的使用,所以这样用有时会产生不
    确定的结果
    //
    FUNC f = reinterpret_cast< FUNC>(DoSomething );
    f(); 
    }

    这样我们就把一个函数赋值,还可以调用。

    dynamic_cast虚函数中的父类赋给子类的转化

    dynamic_cast用于将一个父类对象的指针转换为子类对象的指针或引用(动态
    转换)
    向上转型:子类对象指针->父类指针/引用(不需要转换)
    向下转型:父类对象指针->子类指针/引用(用dynamic_cast转型是安全的)

    这里用这种强转必须要虚函数的类,用dynamic_cast来转换父类付给子类的时候,有时候可以,有时候不行,这样用dynamic_cast 强转就会在转变的过程中去判断,如果可以把父类给子类就强转,如果不行就返回0.

    class A
    {
        public :
        virtual void f(){}
    };
    class B : public A
    {};
    void fun (A* pa)
    {
        // dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回
        B* pb1 = static_cast<B*>(pa);
        B* pb2 = dynamic_cast<B*>(pa);
        cout<<"pb1:" <<pb1<< endl;
        cout<<"pb2:" <<pb2<< endl;
    }
    int main ()
    {
        A a;
        B b;
        fun(&a);
        fun(&b);
        return 0;
    }

    强转
    红色标记的是强转失败,因为把父类赋给子类失败。强转就会判断是否成功。
    如果用c语言中强转可以成功,但是如果强转后,去访问有可能会访问越界。

    explicit关键字

    在强转中,对于单参数的构造函数,支持隐式类型的转换,所以当我们不需要隐式类型的转换的时候,我们就可以加上explicit关键字来防止,在构造函数的时候发生隐式类型的转换。
    单参数的类构造函数的隐式类型转换。

    class A
    {
    public :
        explicit A (int a)
        {
        cout<<"A(int a)" <<endl;
        }
        A(const A& a)
        {
        cout<<"A(const A& a)" <<endl;
        }
    private :
        int _a ;
    };
    int main ()
    {
        A a1 (1);
        // 隐式转换-> A tmp(1); A a2(tmp);
        A a2 = 1; // 这是因为单参数支持隐式类型转换
    }

    我们加上关键字后,用 = 来进行隐式类型转换,是编译不能通过的。
    编译不通过
    如果我们不加就可以通过。

    展开全文
  • java基本数据类型之间的转换

    万次阅读 2019-01-23 13:35:29
    1、数据类型的分类     2、比较数据类型之间的字节大小 ...3、转换中的知识点 ...*java中整数类型默认的int类型;...字符串在转化成char类型是不能像int、float那样使用封装类的parseXXX方法等,但它可以转换成c...

     

    1、数据类型的分类

     

     

    2、比较数据类型之间的字节大小

                1字节=8位

    3、转换中的知识点

    *java中整数类型默认的int类型;小数类型默认的double;

    *String的字符串转化为char类型时,只能用char类型的数组来接收;字符串在转化成char类型是不能像int、float那样使用封装类的parseXXX方法等,但它可以转换成char类型的数组;
     自己心得:byte de=(byte) 128;System.out.println(de); 结果:-128
    //如果数字溢出当前的数字类型,有两种方法可以阻止其出错,一种是直接强转成 当前数据类型,另一种是转成其他的数据类型(较大的)

    //在进行数据类型转换时,两个char类型的数字相加强转成char时,会对应成字符编码里面的,但大多都会
     //出现乱码,一个char类型的数字,一个字符如‘a’相加,最后结果会对应字符编码里面的,并输出相对应的字符;
    //如果是提升为int类型时,不论是两个char类型的数字相加,还是一个char类型的字符和一个数字最后的结果都是数字 
     
    例如:  

    char c=12;
    char c1=12;
    char c4='a';
    char c5=28;
    char sa='a';
    char sa1='b';
    
    int c3=c+c1;
    int c7=c4+c5;
    
    char c2=(char) (c+c1); 
    
    char c6=(char) (c4+c5); 
    
    char sa3=(char) (sa+sa1);   
    
    System.out.println("**********");    
    System.out.println(c2);
    System.out.println(c6);
    System.out.println(sa3);
    System.out.println("**********");
    
    System.out.println(c3);
    
    System.out.println(c7);

    结果:

    *String的字符串进行类型转换时,如果字符串中包含long整形的字符大写L或者小写l时,在转换成字符串时,会出现错误

    例如:    String str="123L";
                  long str1=Long.parseLong(str); 
                  System.out.println(str1);//结果:错误

    *String的字符串是float、double浮点型时,字符串可以加f、F、D、d等,在进行基本类型转换时不会出错

     例如:   String f1="12.34f";

                  float f2=Float.parseFloat(f1); 

                  System.out.println(f2);//结果:12.34,;d、D也一样

        

    4、转换

    *自动类型转换(也叫隐式类型转换) ,其实就是小范围的数据类型向大范围的数据类型转换,例如int类型转long

    *强制类型转换(也叫显式类型转换) int b = (int)(i + j);

    *强制类型转换在某种情况下会丢失精度      

    *表达式的数据类型自动提升

    5进行四则运算时

    a、所有的byte型、short型和char的值将被提升到int型

    b、如果一个操作数是long型,计算结果就是long型

    c、如果一个操作数是float型,计算结果就是float型

    d、如果一个操作数是double型,计算结果就是double型

    e、如果一个操作数是String型,计算结果就是String型

    *面试陷阱

    byte b1 = 10;
    byte b2 = 20;
    //错误: 不兼容的类型: 从int转换到byte可能会有损失
    //否则,两个操作数都将转换为int类型。
    byte b3 = b1 + b2 //错误,b1+b2是int类型,java的整数默认类型为int,b3是byte类型,二者类型不同,所以出错
    byte b3 = (byte)(b1 + b2); //正确

    *面试陷阱2:

    short s1 = 10; 
    s1 = s1 + 12; //错误: 不兼容的类型: 从int转换到short可能会有损失
    
    short s2 = 10; 
    s2 += 12; // 等同于short s2 = (short)(s2 + (short)1); //正确
    展开全文
  • 类型转换

    2020-08-30 15:19:00
    文章目录自动类型转换int 转 longlong 转 floatfloat 转 double强制类型转换int 转 byte类型相互转换Byte 转 Stringint转Integerint转StringLong 转 StringDouble 转 StringInteger 转 intInteger 转 StringString ...

    自动类型转换

    byte,short,char->int->long->float->double
    
    byte,short,char三者之间不相互转换,再运算的时候,都把自己提升为int去操作
    

    int 转 long

    int i = 6;
    
    long l = i;
    

    long 转 float

    long l = 6;
    
    float f = l;
    

    float 转 double

    float f = 6;
    
    double d = f;
    

    强制类型转换

    double->flost->long->int
    
    把范围大的数据类型,强制转换为范围小的数据类型
    注:会损失精度
    

    int 转 byte

    int a = 2;
    byte b = 3;
    
    //(a+b):在括号中先运算 
    //(byte): 指运算后要转换后的类型
    int c = (byte)(a + b);
    

    类型相互转换

    Byte 转 String

    Byte b = 6;
    String s = String.valueOf(b);
    

    int转Integer

    int i = 10;
    Integer integer = new Integer(i);
    

    int转String

    int i = 10;
    
    //第一种
    String s =String.valueOf(i);
    
    //第二种
    String s =Ingeger.toString(i);
    
    //第三种
    String s = "" +i;
    

    Long 转 String

    Long l = 8L;
    String s = String.valueOf(l);
    

    Double 转 String

    Double dou = 1.9;
    String s = String.valueOf(d);
    

    Integer 转 int

    Integer integer = new Integer(10);
    
    int k = integer.intValue();
    

    Integer 转 String

    Integer integer = new Integer(10);
    
    //第一种
    String str = integer.toString();
    
    //第二种
    String str = integer + "";
    
    //第三种
    String.valueOf(integer);
    

    String 转 Byte

    String str = "6";
    
    //第一种
    byte b = Byte.parseByte(str);
    
    //第二种
    Byte b = Byte.valueOf(str);
    

    String 转 int

    String str ="10"; 
    
    //先把string转成Integer
    Integer integer = newInterger(str); 
    
    //再把Integer转成int
    int i = integer.intValue(); 
    

    String 转 Integer

    String str = "10";
    
    //第一种
    Integer integer =Integer.valueOf(str);
    
    //第二种
    Integer integer = Integer.parseInt(str);
    

    String 转 Double

    String str = "2.9";
    Double d = Double.valueOf(str);
    

    String 转 Long

    String str = "6";
    
    //第一种
    Long l = Long.valueOf(str);
    
    //第二种
    long l = Long.parseLong(str);
    

    String 转 BigDecimal

    String str = "10";
    
    BigDecimal bigDecimal = new BigDecimal(str);
    

    String 转 Date

    String string = "2020-08-30";
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Date parse = format.parse(string);
    

    String日期 转 Timestamp

    String s = "9999-12-30 00:00:00";
    Timestamp timestamp = Timestamp.valueOf(s);
    

    BigDecimal 转 String

    BigDecimal bigDecimal = new BigDecimal("1000000");
    String string = bigDecimal.toString();
    

    Date 转 String

    Date date = new Date();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String format = simpleDateFormat.format(date);
    

    Date 转 Timestamp

    Timestamp timestamp = new Timestamp(date.getTime());
    

    Timestamp 转 String

    Timestamp timestamp = new Timestamp(System.currentTimeMillis());
    
    //第一种
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String format = simpleDateFormat.format(timestamp);
    
    //第二种
    String string = timestamp.toString();
    

    Timestamp 转 Date

    Timestamp timestamp = new Timestamp(System.currentTimeMillis());
    Date date = new Date();
    date = timestamp;
    
    展开全文
  • 数据类型转换

    2020-10-20 21:37:21
    数据类型转换 概念 将一个类型的数据转化为另一个类型的数据,例如:str→int,int→bool等 与进制转换不同,进制转换是将int类型通过不同的进制表示,本质上数据类型还是int。 原因 不用类型的数据在作运算时,...

    数据类型转换

    概念

    将一个类型的数据转化为另一个类型的数据,例如:str→int,int→bool等

    与进制转换不同,进制转换是将int类型通过不同的进制表示,本质上数据类型还是int。

    原因

    不用类型的数据在作运算时,运算规则不同。例如:

    a = input('请输入账号')
    print(a+1)  # 会报错 因为input接受的用户输入的信息默认是str类型,str和数字不能做加法运算
    print(int(a)+1)  # 使用int内置类就可以转化为整数,就可以和数字作运算了
    

    转化为整数

    利用int内置类将数据转化为整数

    a = '1234'
    b = int(a) # 将str的1234转化为整数的1234
    print(b) 
    
    a = 'hello'
    b = int(a)
    print(b) # 不能转化为整型,会报错
    
    a = '1abc'
    print(int(a,16)) # 将a当作是十六进制转化为整型
    
    

    转化为浮点数

    使用float内置类可以将数据转化为浮点数

    a = '3.14'
    b = float(a) # 将str的3.14转化为浮点型的3.14
    print(b)
    
    
    a = 3
    b = float(a)
    print(b)
    

    转化为字符串

    使用内置类str将数据转化为字符串类型

    a = 25
    b = str(a)
    print(b)
    
    

    转化为布尔值

    使用内置类bool可以将数据转化为布尔值

    number = 23
    print(bool(number)) # True
    number1 = 0
    print(bool(number1))# False
    # 数字中,除了0被转化为布尔值时是False,其余都是True
    
    a = 'hello'
    print(bool(a))# True
    new_a =  ''
    print(bool(new_a))# False
    # 字符串中除了空字符串转化为布尔值为False,其余为True
    
    a = []
    print(bool(a))# False
    b = {}
    print(bool(b))# False
    print(bool(None)) # False
    c = ()
    print(bool(c)) # False
    d = set()
    print(bool(d)) # False
    
    # 在计算机中,True和False分别用1和0来储存。
    print(True+1) # 结果为2
    print(False+1) # 结果为1
    

    在python中,0,空数据,空字符串,空字典,空元组,空列表,空集合转换为布尔值为False,其余为True。

    # 隐式类型转换
    if 2 :   # 2转换为布尔值为True,所以会打印'yeah'
      print('yeah')
    
    展开全文
  • 自动类型转换

    千次阅读 2019-02-01 19:51:57
     在java 程序中,不同的基本类型的值经常需要进行相互类型转换类型转换分为自动类型转换和强制类型转换。布尔类型boolean占有一个字节,由于其本身所代码的特殊含义,boolean类型与其他基本类型不能进行类型的...
  • Java 类型转换

    万次阅读 2019-05-17 08:11:26
    一、自动类型转换(隐式类型转换) 整型、实型(常量)、字符型数据可以混合运算。不同类型的数据先转化为同类型再进行运算 自动转换按从低级到高级顺序: char ↓ Byte→short→int→long---›float→double ...
  • Android Studio 开发app时, findViewById 输入后多数情况下要强制转换,以下有个快捷的方法: 在输入 分号; 前, Alt + Enter 注意,如果在 输入 分号之后再按快捷键, 将没有效果。这时需要将光标退回至分号前...
  • c++类型转换

    千次阅读 2019-05-29 19:45:08
    c 风格的转换的格式很简单(TYPE) EXPRESSION,但是 c 风格的类型转换有不少的缺点,有的时候用 c 风格的转换是不合 适的,因为它可以在任意类型之间转换,比如你可以把一个指向 const 对象的指针转换 成指向非 ...
  • 类型转换 JS 数据类型 通过函数进行类型转换 String Number 之间的想换转换 自动类型转换 目录导航 类型判断 typeof JS 中可以使用关键字 typeof 判断 demo typeof "hello" typeof ...
  • 我们在进行数据库查询的时候, 传入的某些数值会与数据库字段类型不一致, 这时我们就需要进行类型转换 比如有表student: name (VARCHAR) sex (VARCHAR) id (VARCHAR) 张三 男 1001 李四 男 1002 ...
  • js面试题大坑——隐式类型转换

    万次阅读 多人点赞 2018-09-28 17:50:17
    · 1.1 隐式转换介绍 · 1.2 隐式转换规则 · 1.3 坑一:字符串连接符与算术运算符隐式转换规则混淆 · 1.4 坑二:关系运算符:会把其他数据类型转换成number之后再比较关系 · 1.5 坑三:复杂数据类型在隐式...
  • pandas:数据类型转换

    千次阅读 2018-12-15 14:46:09
    今天做机器学习实验,...把类别category类型转换成dummy/indicator变量。 首先介绍get_dummies(): pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None,sparse=False, dro...
  • 自动类型转换规则: 强制类型转换: 代码示例: package com.jredu.ch02; public class Ch04 { public static void main(String[]args){ //自动类型转换 //基本数据的自动类型转换只有7种...
  • SQL中类型转换函数

    万次阅读 2018-09-03 19:33:16
     cast(表达式 as 数据类型)  select 100.0 +cast('1000' as int) -- 1100.0 默认把字符串转换成浮整形  2.convert convert(数据类型,表达式) select 100.0 + convert(int,'1000')-- 1100.0 默认把字符串...
  • pandas的dataframe如何更改数据类型

    万次阅读 多人点赞 2019-04-13 20:01:54
    pandas的dataframe数据类型转换 在使用pandas库进行数据分析时,有时候会需要将object类型转换成数值类型(float,int),那么如何做呢? 主要有以下三种方法:创建时指定类型,df.astype强制类型转换,以及使用pd....
  • 一、python中字符串转换成数字 (方法1) 类中进行导入:import string str='555' num=string.atoi(str) num即为str转换成的数字 转换为浮点数:string.atof(str) (方法2)直接int int(str)即可。 二、...
  • Python变量类型的强制转换

    万次阅读 2017-10-24 14:32:41
    当我们需要对数据的类型转换时,只需要将数据类型作为函数名即可。 下面给出的函数可以执行数据类型之间的转换,函数返回一个新的对象,表示转换的值 函数 描述 int(x [,base]) 将x...
  • C++ 类型转换

    万次阅读 2018-05-10 11:17:22
    static_cast 只提供编译时的类型检查,没有运行时类型检查。完全不相干类型之间的转换是不...用于基本数据类型之间的转换,支持占用不同存储空间的基本类型的转化,但这种转换的安全性也要开发人员来保证。 支持vo...
  • python如何让list数组元素统一转换类型

    万次阅读 多人点赞 2019-10-18 21:58:13
    在学习python的过程中遇到一串没见过的代码: label_list = [int(i) for i in label_list] ...在下述代码第二行中,我们把int(i)改成了str(i),尝试着把所有数组转换成str类型 测试如下代码: label =list((1,2...
  • C++ - string类型转换int类型

    万次阅读 多人点赞 2017-05-13 21:47:23
    string类型转换int类型本文地址: http://blog.csdn.net/caroline_wendyC语言转换形式:... std::string str; int i = atoi(str.c_str()); ...C++转换形式(C++11):... std::string str; int i = std::stoi(str); ......
1 2 3 4 5 ... 20
收藏数 2,067,930
精华内容 827,172
关键字:

类型转换