c++中,在赋值时如果类型不匹配,就会应用到:类型转换。类型转换又分为隐式转换(implicit conversion) 和 显式强制类型转换(emplcit conversion)。在这我围绕着类的情况展开来说。

  • 类中的类型转换,离不开转换函数。
    创建转换函数的格式:operator typeName();typeName指出了要转换的类型,一般是基本整型,如int, double...
    注意一下几点:1,转换函数必须是类方法,即要在类中声明;  2,转换函数不能指定返回类型;  3,转换类型不能有参数。
  • 假设存在一个类:vector ,类中有两个转换函数,一个是double , 一个是int 的。我声明定义一个对象:vector pop(4.66)(注意:我省略了构造函数的说明,且这是隐式调用构造函数)。
    double ptest = pop;
    cout << "pop = " << ptest << endl;
    上面第一句会将类对象pop隐式转换为double类型然后赋值给ptest 。

    如果没有double ptest = pop 这一句,而是直接 cout << "pop = " << ptest << endl,就会出现编译错误,原因是:在cout示例中,并没有指定隐转换为int还是double,所以编译器不知道要转换哪个,也就是出现了二义性转换。但如果在类中只定义了一个转换函数,则编译器会接受该语句,这是因为只有一个转换可能,因此不会存在二义性。

  • 赋值的情况类似。对于当前的类声明(即定义了两个转换函数的类)来说,编译器会认为下面的语句二义性而拒绝它:
    long gone = pop
    在c++中,int 和 double都可以被赋给long变量,所以对于目前的类来说,编译器使用int转换函数或者double转换函数都是合法的。编译器不想承担选择转换函数的责任。和上面一样,删去任何一个着两个转换函数之一,编译器都将会接受long gone = pop 这句语句。
  • 当类定义两种或多种转换函数时,仍可以用显式强制类型转换来指出要使用哪个转换函数。可以使用下面任何一种强制类型转换表示法:
    long gone = (double)pop  
    long gone = double (pop)
    这两句功能一样,都是将pop先转换为一个double值,然后赋值操作再将double值转换为long类型。

c++ 自动应用类型转换的更多相关文章

  1. c语言的自动类型转换

    转自c语言的自动类型转换 自动转换遵循以下规则: 1)        若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 2)        转换按数据长度增加的方向进行,以保证精度不降低.如 ...

  2. C语言自动类型转换

    自动转换遵循以下规则: 1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 2) 转换按数据长度增加的方向进行,以保证精度不降低.(eg:int型和long型运算时,先把int量转成lo ...

  3. Java数据类型转换(自动转换和强制转换)

    数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...

  4. c语言的自动类型转换(转)

    一.自动转换遵循以下规则: 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 转换按数据长度增加的方向进行,以保证精度不降低.如int型和long型运算时,先把int量转成long型后再进行 ...

  5. BeanUtils中的自动类型转换(二)

    javabean package entity; import java.util.Date; /** * 一个测试用: * student,javaBean * @author mzy * 一个标准 ...

  6. C++类型转换函数

    1.什么是类型转换函数 类型转换函数的作用是将一个类的对象转换成另一类型的数据. class testclass { private: int r; int m; public : testclass ...

  7. JavaScript中的数据类型转换

    本文中提到的“原始值”指的是undefined,null,Boolean,string和number. 本文中的对象是native对象,宿主对象(浏览器定义的对象)按照各自的算法转换. JavaScr ...

  8. java语言中数值自动转换的优先顺序

    转换原则:从低精度向高精度转换byte .short.int.long.float.double.char数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用 ...

  9. Java 类型转换以及Object转成其他类型

    Object转int int count=(int)map.get("count") int count=Integer.parseInt((String)map.get(&quo ...

随机推荐

  1. LoonAndroid自动检测输入框 --- Author: rose && lvyerose@163.com

    LoonAndroid框架,同时给我们提供了一套自动检测输入规则的工具,用起来很是方便,下面介绍一下这个东东的使用方法(注意,该说明是基于项目已经集成了LoonAndroid框架而言,如果您未集成该框 ...

  2. android 学习笔记(1)

    内容来源:高成珍.钟元生<Android编程经典案例>学习笔记 表格布局——TableLayout 表格布局以行和列的方式来管理界面的布局,但并不能明确声明包含几行几列.可通过TableR ...

  3. 移植 DeepinQQ 到 Fedora 中

    本着自由/开源软件的分享精神创作此文,如有任何权力侵害请联系我,我将积极配合. 移植 DeepinQQ 到 Fedora 中 --也不知道是用移植还是迁移更合适 写在前面 首先,在这里要感谢武汉深之度 ...

  4. JavascriptS中的各结构的嵌套和函数

    各位朋友大家好,上周更新给大家分享了JavaScript的入门知识及各种常用结构的用法,那么,本次更新博主就跟大家更深入的聊一聊JS各结构的嵌套用法,及JS中及其常用的一种结构--函数.以下为函数和循 ...

  5. 23(java/io/data_io)

    package test_ppt;import java.io.*;public class test_ppt{ public static void main(String args[]) thro ...

  6. 静态链表实现(A-B)+(B-A)【代码】

    -----------------------------------------------第一次发代码,写在前面------------------------------------------ ...

  7. 从零开始用 Flask 搭建一个网站(三)

    从零开始用 Flask 搭建一个网站(二) 介绍了有关于数据库的运用,接下来我们在完善一下数据在前端以及前端到后端之间的交互.本节涉及到前端,因此也会讲解一下 jinja2 模板.jQuery.aja ...

  8. 微信小程序后台音乐播放注意事项

    wx.seekBackgroundAudio(OBJECT) 作用:控制音乐播放进度. 注意: 该事件 会触发 wx.onBackgroundAudioPlay(CALLBACK) 事件 ,也就是相当 ...

  9. uoj#179 线性规划

    这是一道模板题. 本题中你需要求解一个标准型线性规划: 有nn个实数变量x1,x2,⋯,xnx1,x2,⋯,xn和mm条约束,其中第ii条约束形如∑nj=1aijxj≤bi∑j=1naijxj≤bi. ...

  10. EverythingAboutJava

    1 GC gabage collection 垃圾回收Java GC系列(1):Java垃圾回收简介 http://mp.weixin.qq.com/s?src=3&timestamp=149 ...