【C++自我精讲】基础系列五 隐式转换和显示转换

时间:2022-09-10 20:12:44
【C++自我精讲】基础系列五 隐式转换和显示转换
0 前言

1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换。

2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换。

1 隐式转换

定义:隐式转换是系统跟据程序的需要而自动转换的。

1)C++类型(char,int,float,long,double等)的隐式转换:

算术表达式隐式转换顺序为:

1、char - int - long - double

2、float - double

//1)算术表达式
int m = ;
double n = m;//n = 10.0;隐式把m转为double类型 int m = ;
float f = 10.0;
double d = m + f;//n = 20.0;隐式把m和f转为double类型 //2)赋值
int *p = NULL; //NULL(0)隐式转换为int*类型的空指针值 //3)函数入参
float add(float f);
add(); //2隐式转换为float类型 //4)函数返回值
double minus(int a, int b)
{
return a - b; //返回值隐式转换为double类型
}

2)C++类对象的隐式转换:

void fun(CTest test); 

class CTest
{
public:
CTest(int m = );
}
fun();//隐式转换
2 显式转换

定义:显式转换也叫强制转换,是自己主动让这个类型转换成别的类型。

1)C++类型(char,int,float,long,double等)的显式转换:

int m = ;
char c = (char)m;//显式把m转为char类型 double d = 2.0;
int i = ;
i += static_cast<int>(d);//显式把d转换为int类型

2)C++类对象的显式转换:当类构造函数只有一个参数或除了第一个参数外其余参数都有默认值时,则此类有隐含的类型转换操作符(隐式转换),但有时隐式转换并不是我们想要的,可在构造函数前加上关键字explicit,来指定显式调用。

void fun(CTest test); 

class CTest
{
public:
explicit CTest(int m = );
}
fun();//error 隐式转换
fun(static_cast<CTest>()); //ok 显式转换

【C++自我精讲】基础系列五 隐式转换和显示转换的更多相关文章

  1. 【C&plus;&plus;自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  2. 【C&plus;&plus;自我精讲】基础系列四 static

    [C++自我精讲]基础系列四 static 0 前言 变量的存储类型:存储类型按变量的生存期划分,分动态存储方式和静态存储方式. 1)动态存储方式的变量,生存期为变量所在的作用域.即程序运行到此变量时 ...

  3. 【C&plus;&plus;自我精讲】基础系列一 指针与引用

    [C++自我精讲]基础系列一 指针与引用   一 前言   指针.引用.指针与引用区别. 二 指针   变量:代码中常常通过定义变量来申请并命名存储空间,并通过变量的名字来使用这段存储空间. //变量 ...

  4. 【C&plus;&plus;自我精讲】基础系列六 PIMPL模式

    [C++自我精讲]基础系列六 PIMPL模式 0 前言 很实用的一种基础模式. 1 PIMPL解释 PIMPL(Private Implementation 或 Pointer to Implemen ...

  5. 【C&plus;&plus;自我精讲】基础系列三 重载

    [C++自我精讲]基础系列三 重载 0 前言 分二部分:函数重载,操作符重载. 1 函数重载 函数重载:指在同一名字空间中,函数名称相同,参数类型.顺序或数量不同的一类函数,同一函数名的函数能完成不同 ...

  6. C&plus;&plus;模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解

    模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程.对于函数模板而言,模板实例化之后,会生成一个真正的函数.而类模板经过实例化之后,只是完成了类的定义,模板类的成员函数需要到调用时才会被初始 ...

  7. web基础系列&lpar;五&rpar;---https是如何实现安全通信的

    https是如何实现安全通信的 如果有不正确的地方,还望指出! web基础系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 回顾 总结几个概念(具体描述可以看上一篇文章) 数字 ...

  8. Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution

    在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧.scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成.scalaz typ ...

  9. C&num;隐式转换和显示转换举例--C&num;基础

    高精度的数据类型转换为低精度的数据类型是显示转换,低精度的转换为高精度的是隐式转换. 温馨提示:不能说强制类型转换是从低精度到高精度. int a=666;float b=(float)a: 由a到b ...

随机推荐

  1. IOS系统概述与层次

    一.概述 IOS是apple公司为其自己的移动设备(iPhone,iPod touch,iPad)而开发的操作系统,IOS许多的技术是基于苹果的Mac OSX桌面系统的,如果你开发过苹果的mac系统应 ...

  2. iOS学习03C语言循环结构

    1.while循环 while (循环条件) {        循环体: } // 1.定义循环变量 ; // 2.循环条件 ) { // 3.循环体 printf("%d\n", ...

  3. css三角形的实现

    实底三角形: <html> <head> <title></title> <style type="text/css"> ...

  4. Sql server之路 (四)添加本地数据库MDF文件

    安装环境 VS2008  Vs2008 Sp1 安装系统 Win8 1.创建窗体 右键添加新项 上一步 上一步 点击确定 双击Database1.mdf文件 在列名出填写字段名 保存 Ctrl+S 点 ...

  5. Visual Studio 2010 更新NuGet Package Manager出错解决办法

    在Visual Studio 2010的扩展管理器中发现NuGet Package Manger有最新版本更新提示,选择更新安装提示以下错误信息: 2013/4/25 1:11:48 - Micros ...

  6. HDU 3533 Escape BFS搜索

    题意:懒得说了 分析:开个no[100][100][1000]的bool类型的数组就行了,没啥可说的 #include <iostream> #include <cstdio> ...

  7. 解决mybatis使用枚举的转换

    解决mybatis使用枚举的转换 >>>>>>>>>>>>>>>>>>>>&gt ...

  8. C Traps and Pitfallss

    第一章 词法“陷阱” 发送阿罡发公司阿发送个发送阿罡发公司阿发送个 第二章

  9. 读书笔记&colon; nodejs API 参考

    >> bufferBuffer对象是全局对象Buffer支持的编码方式:ascii, utf8, base64, binarynew Buffer(size)new Buffer(arra ...

  10. JAVA网络编程TCP通信

    Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端 ...