C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上。

隐式类型转换发生在下列这些典型情况下。

1. 在混合类型的算数表达式中

规则:在这种情况下最宽的数据类型成为目标转换类型,这也被称为算术转换。

例子:

 int ival = ;
double dval = 3.14159;
// ival被提升为double类型:3.0
ival + dval;

2. 用一种类型的表达式赋值给另一种类型的对象

规则:这种情况下目标转换类型是被赋值对象的类型。

例子:

 // 0被转换成int*类型的空指针值
int* pi = ;
// dval被截取为int类型:3
ival = dval;

3. 把一个表达式传递给一个函数,形参与表达式的类型不同

规则:这种情况下目标转换类型是形参的类型。

例子:

 extern double sqrt(double);
// 2被提升为double类型:2.0
cout << sqrt() << endl;

4. 从一个函数返回一个表达式,表达式的类型与返回类型不同

规则:这种情况下目标转换类型是函数返回类型。

例子:

 double reduce(int ival1, int ival2)
{
// 返回值被提升为double类型
return ival1 - ival2;
}

算术转换的基本原则:

1、为防止精度损失,如果必要的话,类型总是被提升为较宽的类型。

2、所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换成整型。

规则的定义如上面所述,这些规则定义了一个类型转换层次结构。

一般有:

long double > double > float

如果两个操作数都不是3种浮点类型之一,它们一定是某种整值类型。在确定共同的目标提升类型之前,

编译器将在所有小于int的整值类型上施加一个被称为整值提升(integral promotion)的过程。

在进行整值提升时类型char、signed char、unsigned char和short int都被提升为类型int。

一旦整值提升执行完毕,类型比较就又一次开始。

总结:尽管算术转换的这些规则带给你的困惑可能多于启发,但是一般的思想是尽可能地保留多类型表达式中涉及的值的精度。

这正是通过把不同的类型提升到当前出现的最宽的类型来实现的。

 

C++内置类型对象之间的转换的更多相关文章

  1. JSON字符串和JS对象之间的转换

    JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象  JSON字符串 str JSON.parse(str) eval(str) eva ...

  2. jquery对象与dom对象之间互相转换的方法

    本文主要讲述jquery对象和js里的dom对象之间互相转换的方法,使jquery对象可以直接使用js里的方法,或js里的dom对象使用jquery里的方法. jquery对象和dom对象是不一样的, ...

  3. Java基础97 json插件的使用(java对象和json字符串对象之间的转换)

    1.需要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-19 * */ public class ...

  4. DOM和jquery对象之间的转换

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. Java中字节与对象之间的转换

    近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOu ...

  6. 需要知道的jQuery对象和DOM对象之间的转换

    jQuery对象和DOM对象之间的转换 jQuery对象就是通过jQuery包装DOM对象后产生的对象. jQuery对象和DOM对象不能互相调用对方的方法或属性,但它们之间可以进行转换. 两者都无法 ...

  7. jQuery对象与JS原生dom对象之间的转换

    jQuery就是JS的一个扩展库,工具库,提供很多方便快捷的方法,所以将JS对象转换为jQuery对象后,能更方便地操作这个对象.但是jQuery对象也不是万能的,有一些JS对象有的能,jQuery对 ...

  8. JSON 与JAVA对象之间的转换(转)

    JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...

  9. JsonConvert对象实现json与对象之间的转换

    自己下载Newtonsoft.Json文件 使用JsonConvert对象转换 1. 2.添加引用到项目中,然后导入命名空间 3.就可以使用JsonConvert对象实现Json与类型之间的转换

随机推荐

  1. Doctype 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

    Doctype:(Document Type)文档类型,它位于文档中最前面的位置,处于标签之前.如果你想制作符合标准的页面,一个必不可少的关键组成部分就是DOCTYPE的声明.确定了正确的Doctyp ...

  2. perl 解json数组

    <pre name="code" class="cpp">http://11.36.10.82:4000/api/bus?bus=307&f ...

  3. C语言入门(3)——对Hello World程序的解释

    上篇我们写了一个最简单的程序.这个简单的程序包含了很多重要的内容.本篇我们通过这个最简单的Hello World程序逐一讲解C语言程序的一些特点. 打开Visual Studio 2013 通过菜单- ...

  4. [LeetCode][Python]Container With Most Water

    # -*- coding: utf8 -*-'''https://oj.leetcode.com/problems/container-with-most-water/ Given n non-neg ...

  5. extend vg(pv,lv)use HotPlug Storage PV for VMI(ECC Env)

    Preface: 前期存储未规划好,业务快速扩展,数据高安全需求(异地,More one copy),需求多多?NM干着干着活就会时不时的坑爹起来了!particularly Real Product ...

  6. 简单的Cookie登录

    登录页前台代码 <form id="form1" action ="" method="post"> <input typ ...

  7. 【转】在Spring中基于JDBC进行数据访问时怎么控制超时

    http://www.myexception.cn/database/1651797.html 在Spring中基于JDBC进行数据访问时如何控制超时 超时分类 超时根据作用域可做如下层级划分: Tr ...

  8. JavaSE复习日记 : 递归函数

    /* * 递归函数 * 什么是递归? * 在一个方法的内部,对自身进行调用,又叫做递归调用 * * 递归和循环的编写都包括三部分: * 1. 初始值; * 2. 终止条件; * 3. 前进步长; * ...

  9. hdu4099

    要想通这个题目应该很容易,由于斐波纳契数在近100项之后很大,早就超出long long了.而输入最长的序列才40个数字,所以大约保留前50位,前40位是没有误差的!!!其实,想想我们判断double ...

  10. C++ try catch 捕获空指针异常,数组越界异常

    #include <exception> #include <iostream> using namespace std; /************************* ...