精华内容
下载资源
问答
  • C/C++ 类型自动转换规则

    千次阅读 2015-04-19 12:29:58
     2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。 3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。 4、函数有返回值时,系统将隐式地将返回表达式类型...
    1、隐式转换
        C在以下四种情况下会进行隐式转换:
           1、算术运算式中,低类型能够转换为高类型。
           2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。
           3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。
           4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。
    2、算数运算的隐式转换
        算数运算中,首先有如下类型转换规则:
           1、字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。
           2、short型转换为int型(同属于整型) 。
           3、float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 。
        其次,有下面的规则。
        当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作,转换规则是由低级向高级转换。转换规则如下图所示:
     

     
    • 21da7d46-af62-31d0-925c-df0df956e360-thumb.png
    • 大小: 11.1 KB
    展开全文
  • C++自动类型转换

    2021-01-13 21:55:14
    上节讲的强制类型转换,有点暴力的倾向,今天讲个温柔点的类型-----自动类型转换。 暴力类型转换,哦,不对。 强制类型转换好比是把面团放进机器里,转换成面条; 自动类型转换像是变魔术,把给定的类型转换成预想的...

    上节讲的强制类型转换,有点暴力的倾向,今天讲个温柔点的类型-----自动类型转换。

    暴力类型转换,哦,不对。

    强制类型转换好比是把面团放进机器里,转换成面条;

    自动类型转换像是变魔术,把给定的类型转换成预想的模样。

    自动类型转换的规则如下:

    在这里插入图片描述
    字符串类型(char)可转换成整型(int)和双精度型(double),整型(int)又可以转换成双精度型(double)

    char类型数据转换为int类型数据遵循ASCII码中的对应值,ASCII码请查看WIKI

    ps:字节小的可以向字节大的转换,反之不成立。

    #include <stdio.h>
    int main()
    {
        char fly= 'x';
        int n = fly;       //将c赋值给n
        float i = fly;     //将c赋值给i
        double j = fly;    //将c赋值给j
        printf("%d\n",n);
        printf("%f\n",i);
        printf("%lf\n",j);
        return 0;    
    }
    
    展开全文
  • C++自动类型转换

    2017-11-30 21:35:45
    C++中,如果编译器看到一个表达式或函数调用使用了一个不合适的类型,它会执行一个自动类型转换,将不合适的类型转换为合适的类型。对于自定义类,可以通过定义该类的构造函数的方法将其它类型转换为本自定义类;...

    C++中,如果编译器看到一个表达式或函数调用使用了一个不合适的类型,它会执行一个自动类型转换,将不合适的类型转换为合适的类型。对于自定义类,可以通过定义该类的构造函数的方法将其它类型转换为本自定义类;或者使用运算符将本自定义类转换为其它类型。

    1 定义构造函数将其它类型转换为本类型

    对于一个自定义类,可以为该类定义一个有一个参数的构造函数。则编译器可以将这个函数对应的类型转换为该自定义类类型。

    1.1自动转换例子

    首先,定义一个名为MyClass的类,该类包含一个有一个参数的构造函数。

    class MyClass
    {
    public:
    int i;
    public:
    MyClass(int ii)
    {
    i = ii;
    }
    };

    接下来定义一个名为MyFunc()的函数,该函数的参数是自定义MyClass类的对象。

    int MyFunc(MyClass myclass)
    {
    return myclass.i;
    }
    函数的返回值是MyClass类对象的成员变量i

    最后,在main()函数中,执行如下代码

    int result = MyFunc(1);
    整型变量result的值是1。因为MyFunc()函数的参数是MyClass类的对象,当MyFunc()函数的参数是int类型时,编译器检查是否可以从int类型转换为MyClass类型,结果发现可以通过MyClass的构造函数MyClass(int ii)这种方式实现转换。所以,在以上代码中,MyClass::MyClass(int ii)函数首先被调用,编译器将int类型转换为MyClass类型之后,再调用MyFunc(MyClass myclass)函数将MyClass类对象的成员变量i的值作为返回值返回。

    1.2 禁止自动转换

    如果需要禁止这种通过构造函数的自动转换,则需要使用explicit关键字对MyClass类的构造函数进行修饰。

    class MyClass
    {
    public:
    int i;
    public:
    explicit MyClass(int ii)
    {
    i = ii;
    }
    };

    此时,在main()函数中,如下代码

    int result = MyFunc(1);
    在编译时就会报错,其报错信息为error C2664: int MyFunc(MyClass): 无法将参数 1 从“int”转换为“MyClass””。此时就无法再通过构造函数实现类型的自动转换了。

    此时,只需将调用MyFunc()函数的代码改为如下即可

    int result = MyFunc(MyClass(1));

    2 使用运算符将本自定义类转换为其它类型

    仍以1定义构造函数将其它类型转换为本类型”中提到的MyClass类为例,可以为该类定义一个运算符,通过该运算符,将该类型的对象转换为其它类型。

    class MyClass
    {
    public:
    int i;
    public:
    explicit MyClass(int ii)
    {
    i = ii;
    }
    operator int() { return i; }//运算符重载
    };
    通过operator关键字重载了运算符,但是该运算符重载的方式比较特别,因为没有指定一个返回类型。其实,使用本方法重载的运算符返回类型就是运算符的名字。在MyClass类中重载的运算符的返回值是int,通过该重载的运算符,可以将MyClass类型转换为int类型。

    接下来定义一个名为MyFunc2()的函数,该函数的参数是int类型。

    int MyFunc2(int i)
    {
    return i;
    }
    main()函数中,有如下代码

    int result2 = MyFunc2(MyClass(1));

    此时,虽然MyFunc2()函数的形参类型是int,而实参类型是MyClass,但是由于为MyClass类重载了自动类型转换运算符,所以该代码能够正常运行,result2的值是1

    展开全文
  • c/c++自动类型转换

    2017-01-05 11:11:36
    ->不同类型数据间的混合运算中的自动类型转换。  当一个表达式中有不同的数据类型参加时,默认情况下会进行自动类型转换转换过程当中以运算中最高级别为准。    其中横向箭头是必定发生的转换。纵向箭头是可以...
    学习各种语言,必须要有扎实的基础知识。C和C++有很多灵活性的东西,所以在编程时一定要牢记这些知识点。
    ->不同类型数据间的混合运算中的自动类型转换。
        当一个表达式中有不同的数据类型参加时,默认情况下会进行自动类型转换。转换过程当中以运算中最高级别为准。
            
         其中横向箭头是必定发生的转换。纵向箭头是可以直接越级的。另外必定发生的转换是因为数据长度的不同的,计算的时候目的是为了保证精度。

    举例:
           int a = - 20;
           unsigned char b = 20;
           unsigned int c = 20;
           int d = 0;

        (1)   d = a/b ;//结果是-1
        (2)   d = a/c ;// 结果你可能想不到,可以自己试验,当然这里整数除法还要考虑到余数的舍去问题
        (3)   d = a/(int)c;//结果是-1
    这个例子中式(1)中b是自动转换成int型的,横向的转换。式(2)的问题是unsigned int 实际比int级别要高,所以进行了自动转换,将a转换成了无符号型,如果这个值是正值,这里不会有问题,但是负值就有问题了。所以式(2)要改写成式(3)的样式,即进行强制转换。
        
    强制类型转换相对直白,但是必须注意转换中可能会丧失的有效字节。其实这种转换是不安全的。
           




             
    展开全文
  • c++重载自动类型转换

    2018-06-21 19:48:37
    int和double类型的值进行运算,int自动转换为double型等。 所谓重载自动类型转换,就是用户自己定义类的自动转换方式。。。。、 我越来越懒了,直接贴代码吧。 operator type(){ //type为 `转换到的类型` //不...
  • C++ 类型转换

    千次阅读 多人点赞 2017-08-17 19:03:25
    隐式类型转换 1 数值类型转换 2 指针类型转换 ...C++类型转换大体上包括隐式类型转换和显式类型转换。1. 隐式类型转换隐式类型转换自动执行的,无需显式的操作符。 隐式类型转换发生在很多地方,比如函数
  • C++中,将一个标准类型的变量 的 值 赋给 另一种标准类型的 变量时,如果这两种类型兼容,则C++自动将这个值转换为接收变量的类型。如: long a = 11; //将11从int型转换为long类型 double b = 22; //将22从int...
  • (1)如果有一个操作数的类型是long double,则将另一个操作数转换为long double。 (2)否则,如果有一个操作数的类型是double,则将另一个操作数转换为double。 (3)否则,如果有一个操作数的类型是float,则将...
  • c++类型转换

    2016-04-16 12:05:02
    前言:c++提供了四种类型转换,分别是static_cast,reinterpret_cast,dynamic_cast,...1. static_cast(静态类型转换) c/c++自动类型转换的数据都可以使用static_cast进行转换,这种类型转换使得c++编译器在编
  • 将一个标准类型变量的值赋给另一种标准类型的变量时,如果这两种类型兼容,则C++自动将这个值转换为接受变量的类型。 double time = 11; //int value 11 converted to type double 利用构造函数将typename->类 ...
  • C++变量类型相互转换(自动转换和强制转换) 首先、作为一个职场小白,在此分享一下自己学习C++的一些心得体会,有问题大家可以留言区评论。如有错误,会马上纠正。 步入正题,今天要说的是C++中变量类型的相互...
  • c++ 隐式类型转换

    千次阅读 多人点赞 2018-12-25 17:14:32
    这是指c++自动将一种类型转换成另一种类型,是编译器的一种自主行为。 为什么c++需要隐式类型转换c++多态的特性,就是通过父类的对象实现对子类的封装,以父类的类型返回之类对象。 c++中使用父类的地方一定可以...
  • C++类型转换

    2015-08-26 20:26:48
    C++类型转换 一 隐式类型转换  在C++语言中,某些类型之间有关联。如果两种类型有关联,那么当程序需要其中一种类型类型的运算对象时,可以用另一种关联类型的对象或者值来替代。    Intival = 3.4 + 3; //...
  • c++ 类型转换

    2017-07-29 15:12:34
    自动类型转换很重要,这有助于理解c++的工作细节 自动类型转换 ①将一种算术类型的值赋值给另一种算术类型的变量时,c++对值进行转换 ...c++中的基本类型都是可以相互自动转换的,我们称之为标准转换,但是由”小“转
  • C++:类的自动转换和强制类型转换

    千次阅读 2016-09-06 13:05:05
    C++:类的自动转换和强制类型转换标签(空格分隔): c++ 作者:陈小默C类的自动转换和强制类型转换 C如何处理内置类型转换 构造函数的自动转换 自动转换的条件 自动类型转换的流程 使用explicit关键字关闭隐式类型...
  • C++中,存在隐式类型转换语法(自动转换) int a=12; a=22.5+a; C++还提供了显式类型转换(强制转换) int num=int(99.5); int num2=(int)99.5; //两种写法都正确 注意 不管是自定义类型转换还是强制类型转换,前提是...
  • C++ 数据类型转换

    多人点赞 热门讨论 2021-05-24 04:46:36
    C++ 数据类型转换. 隐式类型转换, 强制类型转换, 自己声明的类型转换, 转换构造函数, 类型转换函.
  • ...这是因为false与0是自动转换的,而0对应到NULL,那是空指针。string有个接收char*参数的构造函数,因此传false进去,是不会引起任何警告的, 但是会在运行时给你惊喜的。
  • vector_t(float aX=0.0f, float aY=0.0f,float aZ=0.0f): x(aX),y(aY),z(aZ){} ... vector_t v1,v2; ... ...通过调试发现有一次构造函数的调用,这才想起来C++自动类型转换。 差笔记得:
  • C++ 强制类型转换和赋值中的类型转换

    万次阅读 多人点赞 2017-02-02 12:11:45
    强制类型转换原C语言的形式:(类型名)(表达式)比如:(double)a //把a转换为double类型 (int)(a+b) //把a+b的值转换为整型需要注意的是:如果强制类型转换的对象是一个变量,那么该变量不需要用括号括起来;但是如果...
  • 警惕c++自动强制类型转换

    千次阅读 2020-10-10 23:58:17
    } 这就涉及到一个有趣的问题了 隐式类型转换c++里最坑新手的玩意,反人类意识的设计。 会在一下几种情况出现 1、不同类型变量赋值 2、不同类型变量计算 3、函数的返回值 4、强制类型转换 默认就是低精度转高精度...
  • C++语言不自动转换不兼容的类型,例如,下面的语句: int *p = 10; 是非法的,因为左边是指针类型,而右边是数字。不过在无法自动转换时,可以使用强制类型转换: int *p = (int *)10; 上述语句将10强制转换为...
  • C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上。 隐式类型转换发生在下列这些典型情况下: 1. 在混合类型的算术表达式中 在这种情况下最宽的数据类型成为目标转换类型,这也...
  • C/C++类型转换

    2015-06-08 00:46:23
    C/C++中的类型转换

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 193,169
精华内容 77,267
关键字:

c++类型自动转换

c++ 订阅