禁止自动类型转换 explicit

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Src;//前置类型声明,因为在Dst中要用到Src的类
  5. class Dst
  6. {
  7. public:
  8. Dst()
  9. {
  10. cout << "Dst::Dst()" << endl;
  11. }
  12. explicit //<1>不准用于自动类型转换
  13. Dst(const Src& s)
  14. {
  15. cout << "Dst::Dst(const Src&)" << endl;
  16. }
  17. };
  18.  
  19. class Src
  20. {
  21. public:
  22. Src()
  23. {
  24. cout << "Src::Src()" << endl;
  25. }
  26. explicit//<2>不准用于自动类型转换
  27. operator Dst() const
  28. {
  29. cout << "Src::operator Dst() called" << endl;
  30. return Dst();
  31. }
  32. };
  33.  
  34. void Func(Dst d)
  35. {
  36.  
  37. }
  38.  
  39. int main()
  40. {
  41. Src s;
  42. Dst d1(s);//注意这是直接构造不能视为类型转换
  43. //以下语句都使用了自动类型转化,当构造函数,类型转换函数,
  44. //均使用了explicit声明时,他们就不能用于自动类型转化了
  45. //所以下面的语句都不能编译通过
  46. Dst d2 = s;//error!not 自动类型转化
  47. Func(s);//errror! not 自动类型转化
  48. //解决问题的办法:<1>和<2>c处的explicit
  49. //不能都不要(去掉),但也不能都要(保留)
  50. return ;
  51. }

禁止自动类型转换--delete

使用=delete修饰的成员函数,不允许被调用

  1. class T
  2. {
  3. public:
  4. T(int)
  5. {
  6. //若没有下面这条语句,则main函数中所有的语句均可以编译通过
  7. T(char) = delete;//可以消除自动转换带来的隐患
  8. }
  9. };
  10.  
  11. void Fun(T t)
  12. {
  13. }
  14.  
  15. int main()
  16. {
  17. Fun();
  18. //Fun('x');自动类型转换失败(char->int),编译不通过
  19. T ci();
  20. //T cc('x');自动类型转换失败,编译不通过
  21. return ;
  22. }
  1. //可以使用=delete删除普通函数(非成员函数)
  2. //可以消除一些自动类型转换带来的隐患
  3.  
  4. void Fun(int i)
  5. {
  6. }
  7.  
  8. void Fun(char c) = delete;//显示删除char版本
  9. int main()
  10. {
  11. Fun();
  12. //Fun('A');//编译不通过!
  13. return ;
  14. }

C++程序设计方法3:禁止自动类型转换的更多相关文章

  1. C++程序设计方法3:自动类型转换

    方法1:在源类中定义目标类型转换运算符 #include <iostream> using namespace std; class Dst { public: Dst() { cout ...

  2. C++程序设计方法3:强制类型转换

    强制类型转换(显示转换) dynamic_cast<Dst_Type>(Src_var) Src_var必须是引用或者指针类型,Dst_Type类中含有虚函数,否则会有编译错误: 若目标类 ...

  3. JavaScript中判断变量类型最简洁的实现方法以及自动类型转换(#################################)

    这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...

  4. win10禁止自动更新的终极方法(亲测有效)

    想必用过win10的朋友对其自动更新一定不会陌生,并且深恶痛绝,    有时正专注做一件事,突然就开始自动更新,被杀个措手不及,而且更新时间真的太久了,尤其最近更新频繁,真是伤脑筋,    期间也尝试 ...

  5. JavaScript系列文章:自动类型转换-续

    在上一篇文章中,我们详细讲解了JavaScript中的自动类型转换,由于篇幅限制,没能覆盖到所有的转换规则,这次准备详细讲解一下. 上次我们提到了对象类型参与运算时转换规则: 1). 在逻辑环境中执行 ...

  6. JavaScript系列文章:自动类型转换

    我们都知道,JavaScript是类型松散型语言,在声明一个变量时,我们是无法明确声明其类型的,变量的类型是根据其实际值来决定的,而且在运行期间,我们可以随时改变这个变量的值和类型,另外,变量在运行期 ...

  7. struts基于ognl的自动类型转换需要注意的地方

    好吧,坎坷的过程我就不说了,直接上结论: 在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法. 例如: 客户端表单: <s:form ac ...

  8. 【转】JavaScript系列文章:自动类型转换

    我们都知道,JavaScript是类型松散型语言,在声明一个变量时,我们是无法明确声明其类型的,变量的类型是根据其实际值来决定的,而且在运行期间,我们可以随时改变这个变量的值和类型,另外,变量在运行期 ...

  9. mooc- 基本程序设计方法week1,week2

    学习了第一单元我们几本可以写出10行左右的代码. week1:python编程之基本方法 1.从计算机到程序设计语言: 理解计算机:计算机是能够根据一组指令操作数据的机器. 功能性:可以进行数据计算 ...

随机推荐

  1. IDEA文件对比

  2. Django 基模板布局设置

    Django 基模板布局设置 基模板 定义基础模板一般分为三块,css部分,body部分,js部分 将基础统一的部分写在基础模板中 差异部分直接 引用 {% block css %}{% endblo ...

  3. C#本质论第四版-1,抄书才能看下去,不然两三眼就看完了,一摞书都成了摆设。抄下了记忆更深刻

    C#本质论第四版-1,抄书才能看下去,不然两三眼就看完了,一摞书都成了摆设.抄下了记忆更深刻 本书面向的读者 写作本书时,我面临的一个挑战是如何持续吸引高级开发人员眼球的同时,不因使用assembly ...

  4. Leetcode刷题第20天

    一.找树左下角的值 题目:513. Find Bottom Left Tree Value C++ Soution 1: /** * Definition for a binary tree node ...

  5. Centos7+ASP.Net Core 运行

    一:ASP.Net Core跨平台运行,需要在Linux安装运行环境.本机器使用的Centos,下载安装地址为:https://www.microsoft.com/net/core#centos su ...

  6. Cisco交换机基础命令 + Win Server08 R2 多网卡配置链路聚合

    最近捣鼓服务器链路集合需要配置交换机… 以前没弄过交换机,现学现卖… 一般交换机是支持telnet的,配置好ip可以直接telnet,当然如果没配的话就要用串口了,串口要选择Serial… 还好我们万 ...

  7. [转] Mongoose 参考手册

    Mongoose 参考手册 标签(空格分隔): MongoDB Mongoose 是什么? 一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据 ...

  8. UICollectionViewController的用法1

    UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableVie ...

  9. C# 之 提高WebService性能大数据量网络传输处理

    1.直接返回DataSet对象 特点:通常组件化的处理机制,不加任何修饰及处理: 优点:代码精减.易于处理,小数据量处理较快: 缺点:大数据量的传递处理慢,消耗网络资源: 建议:当应用系统在内网.专网 ...

  10. nginx反向代理uwsgi django服务器搭建总结

    1.安装python.django.虚拟环境 参考帖子:安装python django https://blog.csdn.net/a249900679/article/details/5152720 ...