C++: Type Conversion (数字,指针,其他type)

参考材料:C++ primer 5th, 4.11

起因是UNIX中一些函数返回void *指针,使用之前要转换成char *指针使用,不清楚会出现什么现象,所以找到type conversion来看

*************************************************************************************

第一部分是implicit conversion

*************************************************************************************

首先,一些总的概念要有:

《arithmetic type conversion》

1--》在做类似“ 3.14 + 3 ”的运算时,C++定义的操作不是将两个不同的type(int,double)直接相加,而是将这两个操作数转换到一个共同的type再做运算。

2--》以上type conversion“are carried out automatically without programmer intervention”,for that reason,it is referred to as "implicit conversions"

3--》"implicit conversions" + “between arithmetic types”时

总的rule是,尽量的preserve precision。所以上述运算会先将“3”转换成type double

《initialization》

1--》"In an initialization, the type of the object we are initializing dominates":即会把initializer转换成要被initialized的object的类型如:int ob = 3.14;会将3.14转换成int

《compiler会进行implicit conversion的场合》

&4.11

《详细的arithmetic type conversions》

&4.11.1

《除了arithmetic之外的一些implicit conversion》

--》void * pointer与其他类型的pointer之间的转换:不会有内容的丢失

--》在condition中,pointer和arithmetic type自动地转换到bool:pointer和arithmetic为0时,都automatically转为
false;otherwise,都转为true

--》可以将pointer or referencne to a nonconst type to a pointer or reference to "corresponding" const type

--》在class中自己define conversion可以让compiler在需要时应用这个conversion

*************************************************************************************

第二部分是explicit conversion

*************************************************************************************

要有概念:现在C++的explicit conversion是在“static_cast, dynamic_cast, const_cast”三者中选。

以前C++的explicit conversion是(type) expr。

当使用(type) expr时,会根据type involved使用以上3者之一

C++: Type Conversion (数字,指针,其他type)

时间: 2024-11-05 14:47:56

C++: Type Conversion (数字,指针,其他type)的相关文章

Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的人,但事实并非如此,例如我.好在闷着头看了一遍,又查资料又敲代码,总算明白了. 其实说穿了一文不值,我们用一个例子来解释: 假定,现有一个app,功能是接收你输入的生日,然后显示你的年龄.看起来app只要用当前日期减去你输入的日期就是年龄,应该很简单对吧?可惜事实不是这样的. 这里面有三个问题: 问题一:我们输入的永远是字符串,字符串需要转成日期格式才能被我们的ap

异常Resource Path Location Type Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define

在Android 开发中关于 Description Resource Path Location TypeConversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/example/recordsdk/BuildConfig; RecordSDK Unknown Android Packaging Problem 这个异常的解决 就是说我手机的Android 系统版本是4.1

[C++] Type Conversion(类型转换)

Type Conversion(类型转换) Two kinds of type conversion explict type conversion(显式类型转换) impict type conversion(隐式类型转换) Two way to  convert type 赋值 构造函数 转换函数 转换函数 不支持friend

error: expected constructor, destructor, or type conversion before '.' token

error: expected constructor, destructor, or type conversion before '.' token   找了半天原因,原来是犯了基础知识不扎实的错误,C++中,全局阈只能声明.初始化变量: 不能用于赋值.运算.调用函数等!!! error: expected constructor, destructor, or type conversion before '.' token

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value

刚刚有在程序中,传递一个空值至MS SQL Server数据库,这个值的数据类型为DATETIME执行时,它却发生了如标题提示的异常:The conversion of a varchar data type to a datetime data type resulted in an out-of-range value. 跟踪一下,当遇上一个空值时,它并没有真正是给一个空值给数据库,而是Datetime的最小值"1/1/0001 12:00:00 AM" 在两个文本框都是空值时,跟

【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)

在Vue中的项目,基于VUX-UI开发,一个常见的需求: 1.金额输入框 2.弹出数字键盘 3.仅支持输入两位小数,限制最大11位数,不允许0开头 第一,首先想到额就是在VUX-UI中制定type=number.--不可行 VUX中的文档和代码说明,type=number不支持maxLength,会报错,而且没有正则替换的处理或者钩子函数,只有输入后提示校验信息. 第二,基于VUX中XInput封装,有如下问题 1)两层v-model,正则替换的值不会触发input框渲染 解决:currentV

Bean named '...' is expected to be of type [...] but was actually of type [com.sun.proxy.$Proxy7解决方法

报错 三月 07, 2017 8:09:52 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh信息: Refreshing org[email protected]41cf53f9: startup date [Tue Mar 07 20:09:52 CST 2017]; root of context hierarchy三月 07, 2017 8:09:52 下午 org.s

customerized convert from field type to DB field's type

@LastModifiedDate @Convert(converter = LocalDateTime2TimestampConverter.class) @Slf4j public class LocalDateTime2TimestampConverter implements AttributeConverter<LocalDateTime, Timestamp> { @Override public Timestamp convertToDatabaseColumn(LocalDat

Jpa自定义查询报错(Failed to convert from type [java.lang.Object[]] to type)

Jpa自定义查询报错 问题背景 今天遇到一个奇怪的报错"Failed to convert from type [java.lang.Object[]] to type",这个报错,百度上也是很少的,恰恰是这样的问题,引起我了解决的欲望.先看看报错: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.Object[]] to type [o