看到一篇文章中对explicit关键字的说明简明易懂,特此收藏和学习。https://blog.csdn.net/qq_24127015/article/details/104412800

C++提供了关键字explicit,声明为explicit的构造函数不能在隐式转换中使用。
1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换。
2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换。
1隐式转换
定义:隐式转换是系统跟据程序的需要而自动转换的。
1)C++类型(char,int,float,long,double等)的隐式转换:
算术表达式隐式转换顺序为:
1、char - int - long - double
2、float - double

//1)算术表达式
int m = 10;
double n = m;//n = 10.0;隐式把m转为double类型

int m = 10;
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); //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 = 0);
}
fun(20);//隐式转换

2显式转换
定义:显式转换也叫强制转换,是自己主动让这个类型转换成别的类型。
1)C++类型(char,int,float,long,double等)的显式转换:
int m = 5;
char c = (char)m;//显式把m转为char类型
double d = 2.0;
int i = 1;
i += static_cast(d);//显式把d转换为int类型
2)C++类对象的显式转换:当类构造函数只有一个参数或除了第一个参数外其余参数都有默认值时,则此类有隐含的类型转换操作符(隐式转换),但有时隐式转换并不是我们想要的,可在构造函数前加上关键字explicit,来指定显式调用。
void fun(CTest test);
class CTest
{
public:
explicit CTest(int m = 0);
}
fun(20);//error 隐式转换
fun(static_cast(20)); //ok 显式转换

explicit 修饰构造函数时,可以防止隐式转换和复制初始化
explicit 修饰转换函数时,可以防止隐式转换,但 按语境转换 除外

C++ explicit的使用相关推荐

  1. 【C++】explicit关键字

    explicit的优点是可以避免不合时宜的类型变换,缺点无.所以google约定所有单参数的构造函数都必须是显式的** explicit关键字只需用于类内的单参数构造函数前面.由于无参数的构造函数和多 ...

  2. C++中的explicit关键字介绍

    C++中的关键字explicit主要是用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换.类构造函数默认情况下声明为隐式的即implicit. 隐式转 ...

  3. explicit specialization of ‘Race‘ after instantiation ,implicit instantiation first required here。

    报错1: E:\project\qt\Pokemon3\PokemonServer\pokemon.cpp:470: error: specialization of 'Race::Race() [w ...

  4. C++中explicit关键字的使用

    1.explicit函数介绍 作用:explicit构造函数是用来防止隐式转换的 实例1如下: #include <iostream>using namespace std;// expl ...

  5. 人脸对齐--Face Alignment by Explicit Shape Regression

    Face Alignment by Explicit Shape Regression CVPR2012 https://github.com/soundsilence/FaceAlignment 本 ...

  6. C#之自己定义的implicit和explicit转换

    在类型转换时常会遇到隐式转换和显式转换.那我们自己定义的类型要怎样去定义隐式转换和显式转换?我们来看一段代码 public class Rational{private Int32 _inner_in ...

  7. explicit关键字

    2019独角兽企业重金招聘Python工程师标准>>> 总结:explicit   只对构造函数起作用,用来抑制隐式转换.   当涉及到以内自定义类型和内置类型之间的赋值操作,构造函 ...

  8. C++中explicit关键字的作用

    C++中explicit关键字的作用 explicit用来防止由构造函数定义的隐式转换. 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. ...

  9. C++ explicit constructor/copy constructor note

    C++:explict 作用显示声明构造函数只能被显示调用从而阻止编译器的隐式转换,类似只能用()显示调用,而不能=或者隐式调用 1 #include <iostream> 2 #incl ...

  10. no copy constructor available or copy constructor is declared #39;explicit#39;

    今天新写了一个类.然后对这个类使用STL中的vector,碰到错误: no copy constructor available or copy constructor is declared 'ex ...

最新文章

  1. leetcode-找出数组中重复的数字
  2. [BZOJ 2756] 奇怪的游戏
  3. C++ Primer 5th笔记(chap 16 模板和泛型编程)重载与模板
  4. angular项目打包_vue项目部署的最佳实践
  5. 【Tools】Ubuntu18.04破解root密码
  6. 黑客还是间谍?让你惊出一身冷汗的10个社会工程学黑客攻击手段
  7. spring是如何管理 事务的
  8. web端 微软 RDLC 报表插件 宽大于高 横向打印失效 解决方案
  9. mfc多线程编程实例_多线程技术的PLC与PC的通讯方式
  10. Spring对字段和集合的注入---依赖注入
  11. paip.提升性能----SQL优化总结
  12. android最好的数独游戏,安卓好数独游戏是哪个?
  13. python贴吧爬虫-python贴吧爬虫
  14. 获取对象上的属性(三种方法)
  15. 1-65535字符集
  16. 在PC下载微信视频号里面的视频
  17. 百家号不收录限流无推荐阅读为零抄袭的解决方法!
  18. 如何组建权责明确、运营高效的数据团队
  19. win10+睡眠+计算机命令,win10关闭休眠命令,win10关闭睡眠模式命令
  20. MySQL数据库的引擎

热门文章

  1. 拨号服务器应用场景有哪些?
  2. java sql timestamp_java.sql.timestamp
  3. 详解 .Net6 Minimal API 的使用方式
  4. 【深入设计模式】装饰模式—什么是装饰模式?装饰模式在源码中的应用
  5. 某计算机主存空间为4MB,一个有32位程序地址空间,页面容量为1KB, 主存的容量为4MB的存储系统,问:(1) 虚页号字段 - 试题答案网问答...
  6. 欢迎注册和登陆我们的学海灯塔
  7. 【Linux】报错:cp: omitting directory...
  8. 微信小程序滑动scroll-view
  9. 【虚函数指针 虚函数表】
  10. 特征选择----relief及reliefF算法