C++内置类型对象之间的转换
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++内置类型对象之间的转换的更多相关文章
- JSON字符串和JS对象之间的转换
JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象 JSON字符串 str JSON.parse(str) eval(str) eva ...
- jquery对象与dom对象之间互相转换的方法
本文主要讲述jquery对象和js里的dom对象之间互相转换的方法,使jquery对象可以直接使用js里的方法,或js里的dom对象使用jquery里的方法. jquery对象和dom对象是不一样的, ...
- Java基础97 json插件的使用(java对象和json字符串对象之间的转换)
1.需要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-19 * */ public class ...
- DOM和jquery对象之间的转换
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Java中字节与对象之间的转换
近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOu ...
- 需要知道的jQuery对象和DOM对象之间的转换
jQuery对象和DOM对象之间的转换 jQuery对象就是通过jQuery包装DOM对象后产生的对象. jQuery对象和DOM对象不能互相调用对方的方法或属性,但它们之间可以进行转换. 两者都无法 ...
- jQuery对象与JS原生dom对象之间的转换
jQuery就是JS的一个扩展库,工具库,提供很多方便快捷的方法,所以将JS对象转换为jQuery对象后,能更方便地操作这个对象.但是jQuery对象也不是万能的,有一些JS对象有的能,jQuery对 ...
- JSON 与JAVA对象之间的转换(转)
JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...
- JsonConvert对象实现json与对象之间的转换
自己下载Newtonsoft.Json文件 使用JsonConvert对象转换 1. 2.添加引用到项目中,然后导入命名空间 3.就可以使用JsonConvert对象实现Json与类型之间的转换
随机推荐
- C#中经常使用的几种读取XML文件的方法
XML文件是一种经常使用的文件格式,比如WinForm里面的app.config以及Web程序中的web.config文件,还有很多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖 ...
- leetcode_question_115 Distinct Subsequences
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
- Python文件或目录操作的常用函数
◆ os.listdir(path) Return a list containing the names of the entries in the directory given by path. ...
- SAN实现
Linux 上主要有三个 iSCSI Target(基于internet scsi协议的target) 实现: Linux SCSI Target – STGT / tgt Linux-IO Targ ...
- sql存储过程的简单使用
存储过程(Stored Procedure)是数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. 创建 ...
- history.js 一个无刷新就可改变浏览器栏地址的插件(不依赖jquery)
示例: http://browserstate.github.io/history.js/demo/ 简介 HTML4有一些对浏览历史的前进后退API的支持如: window.hist ...
- VS2010 打包问题汇总
问题1:打包时:应将msadox28.tlb排除 ,受到windows系统文件保护 解决方案:文件选项上,选择排除即可. 问题2:路径有文件,生成报错,提示找不到文件或文件被锁定. 解决方案:文件被锁 ...
- mysql不区分大小写解决
今天遇到一个情况,前台验证用户昵称的时候发现无论输入Fred fred亦或是FrEd 都会显示昵称存在(这并不是我所期望的结果) debug发现并不是程序问题 hibernate也只是吧hql装成my ...
- Git - 常用技能
参考: http://wuchong.me/blog/2015/03/30/git-useful-skills/
- .Net 类型、对象、线程栈、托管堆运行时的相互关系
JIT(just in time)编译器 接下来的会讲到方法的调用,这里先讲下JIT编译器.以CLR书中的代码为例(手打...).以Main方法为例: static void Main(){ Cons ...