1 class T
 2 {
 3 public:
 4     T(int t){}
 5 };
 6 void foo(T t)
 7 {
 8     return;
 9 }
10 int main()
11 {
12     T t(3);
13     foo(3); //此时会将3隐式转换为T
14 
15     return 0;
16 }
17 

通explicit关键字可以禁止这种隐式转换

 1 class T
 2 {
 3 public:
 4     explicit T(int t){}
 5 };
 6 void foo(T t)
 7 {
 8     return;
 9 }
10 
11 int main()
12 {
13     T t(3);
14     foo(3); //编译器报错error: conversion from ‘int’ to non-scalar type ‘T’ requested
15 
16     return 0;
17 }

看到过说对有多个参数的构造函数使用explicit是个语法错误。
但是用gcc好像这样不报错
g++ -O2 -Wall -o tt tt.cpp

 1 class T
 2 {
 3 public:
 4     explicit T(int t, int s){}
 5 };
 6 void foo(T t)
 7 {
 8     return;
 9 }
10 
11 int main()
12 {
13     T t(3, 4);
14     return 0;
15 }
16 


 1 class T
 2 {
 3 public:
 4     explicit T(int t){}
 5 };
 6 void foo(T t)
 7 {
 8     return;
 9 }
10 
11 int main()
12 {
13     T t(3);
14     foo(3); //编译器报错error C2664: 'foo' : cannot convert parameter 1 from 'int' to 'T'
15 
16     return 0;
17 }
18

转载于:https://www.cnblogs.com/lbsx/archive/2009/08/16/1547123.html

C++的隐式转换和explicit关键字相关推荐

  1. 40隐式构造函数和隐式转换,还有explicit关键词的确切含义【C++学习笔记】

    40隐式构造函数和隐式转换,还有explicit关键词的确切含义 隐式的意思是:不会明确地告诉你它要做什么,它有点像在某种情况下自动的工作 隐式转换 double a = 0.5; int b = a ...

  2. C语言隐式/显式类型转换 | C++四种强制类型转换、类的隐式转换、explicit

    文章目录 C语言类型转换 隐式类型转换 显式类型转换 C++ 强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast 类的隐式类型转换 ...

  3. C++禁止隐式转换之explicit用法

    1.隐式类型转换 #include <iostream> using namespace std; class Test {public: Test(int num){cout <& ...

  4. 隐式转换函数高级使用

    Scala隐式转换函数的底层原理 类型不匹配: java:会强制转换 scala:会使用对象的方法进行数据类型转换,隐式转换,scala中只看函数签名(参数列表和返回值) object Scala_L ...

  5. c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别...

    msdn参考:http://msdn.microsoft.com/zh-cn/library/s53ehcz3.aspx http://msdn.microsoft.com/zh-cn/library ...

  6. c++ explicit 与 隐式转换

    一.关键字 explicit explicit, 顾名思义,即明确的,作为c++中的关键字.名如其意. 在C++中,我们有时可以将构造函数用作自动类型转换函数.但这种自动特性并非总是合乎要求的,有时会 ...

  7. C# 隐式转换关键字 implicit

    implicit 关键字用于声明隐式的用户定义类型转换运算符. 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 引用摘自:implicit(C# 参考 ...

  8. C++拾趣——类构造函数的隐式转换

    之前看过一些批判C++的文章,大致意思是它包含了太多的"奇技淫巧",并不是一门好的语言.我对这个"奇技淫巧"的描述颇感兴趣,因为按照批判者的说法,C++的一些特 ...

  9. ahjesus自定义隐式转换和显示转换

    implicit    关键字用于声明隐式的用户定义类型转换运算符. 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 参考戳此 explicit    ...

最新文章

  1. MySQL数据库自连接查询inner join ... on
  2. 「每周CV论文推荐」 初学深度学习活体与伪造人脸检测必读的文章
  3. 线性回归代码matlab
  4. 分布式01-Dubbo基础背景
  5. Boost enable_if库的测试程序
  6. mysql免安装服务器配置_MYSQL免安装环境配置
  7. mysql表导出csv空值_从mysql中导出csv格式的数据
  8. windows下system函数的使用
  9. pandas处理excel文件和csv文件
  10. EditText数据回显
  11. 【SpringMVC整合MyBatis】整合思路与工程结构
  12. android新运行时权限
  13. Atitit db model 数据库快速建模法 开发效率 目录 1. 结构(数据)设计 行为(处理)设计: 1 2. 业务建模阶段 1 2.1. Ui建模法,根据表单字段建立表字段 2 2.2.
  14. Cocos2d-x游戏开发_战斗算法
  15. RS232串口与RS485串口的区别
  16. js数组对象重复的数据添加标识
  17. H264 视频文件 帧格式 传输封装等
  18. 2015年3月CCF软考试题
  19. matlab ode 实例,选择 ODE 求解器
  20. python实现渐变图像

热门文章

  1. LDA︱基于LDA的Topic Model变形+一些NLP开源项目
  2. 装文件存储服务器Fastdfs
  3. 2018-2019-1 20165302 《信息安全系统设计基础》第三周学习总结
  4. 数据结构与算法14-栈和队列练习题
  5. 扩充你的工具箱 - 大行文件的处理
  6. 蓝牙要抢ZigBee的地盘?低功耗广域网络笑了
  7. [K/3Cloud] 调用其他界面时通过Session传递对象参数
  8. 30个高质量的Psd设计文件分享
  9. 超酷的界面原型设计工具Balsamiq Mockups
  10. 【代码保留】WebService发布本地磁盘信息