C++程序设计方法3:禁止自动类型转换
禁止自动类型转换 explicit
- #include <iostream>
- using namespace std;
- class Src;//前置类型声明,因为在Dst中要用到Src的类
- class Dst
- {
- public:
- Dst()
- {
- cout << "Dst::Dst()" << endl;
- }
- explicit //<1>不准用于自动类型转换
- Dst(const Src& s)
- {
- cout << "Dst::Dst(const Src&)" << endl;
- }
- };
- class Src
- {
- public:
- Src()
- {
- cout << "Src::Src()" << endl;
- }
- explicit//<2>不准用于自动类型转换
- operator Dst() const
- {
- cout << "Src::operator Dst() called" << endl;
- return Dst();
- }
- };
- void Func(Dst d)
- {
- }
- int main()
- {
- Src s;
- Dst d1(s);//注意这是直接构造不能视为类型转换
- //以下语句都使用了自动类型转化,当构造函数,类型转换函数,
- //均使用了explicit声明时,他们就不能用于自动类型转化了
- //所以下面的语句都不能编译通过
- Dst d2 = s;//error!not 自动类型转化
- Func(s);//errror! not 自动类型转化
- //解决问题的办法:<1>和<2>c处的explicit
- //不能都不要(去掉),但也不能都要(保留)
- return ;
- }
禁止自动类型转换--delete
使用=delete修饰的成员函数,不允许被调用
- class T
- {
- public:
- T(int)
- {
- //若没有下面这条语句,则main函数中所有的语句均可以编译通过
- T(char) = delete;//可以消除自动转换带来的隐患
- }
- };
- void Fun(T t)
- {
- }
- int main()
- {
- Fun();
- //Fun('x');自动类型转换失败(char->int),编译不通过
- T ci();
- //T cc('x');自动类型转换失败,编译不通过
- return ;
- }
- //可以使用=delete删除普通函数(非成员函数)
- //可以消除一些自动类型转换带来的隐患
- void Fun(int i)
- {
- }
- void Fun(char c) = delete;//显示删除char版本
- int main()
- {
- Fun();
- //Fun('A');//编译不通过!
- return ;
- }
C++程序设计方法3:禁止自动类型转换的更多相关文章
- C++程序设计方法3:自动类型转换
方法1:在源类中定义目标类型转换运算符 #include <iostream> using namespace std; class Dst { public: Dst() { cout ...
- C++程序设计方法3:强制类型转换
强制类型转换(显示转换) dynamic_cast<Dst_Type>(Src_var) Src_var必须是引用或者指针类型,Dst_Type类中含有虚函数,否则会有编译错误: 若目标类 ...
- JavaScript中判断变量类型最简洁的实现方法以及自动类型转换(#################################)
这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...
- win10禁止自动更新的终极方法(亲测有效)
想必用过win10的朋友对其自动更新一定不会陌生,并且深恶痛绝, 有时正专注做一件事,突然就开始自动更新,被杀个措手不及,而且更新时间真的太久了,尤其最近更新频繁,真是伤脑筋, 期间也尝试 ...
- JavaScript系列文章:自动类型转换-续
在上一篇文章中,我们详细讲解了JavaScript中的自动类型转换,由于篇幅限制,没能覆盖到所有的转换规则,这次准备详细讲解一下. 上次我们提到了对象类型参与运算时转换规则: 1). 在逻辑环境中执行 ...
- JavaScript系列文章:自动类型转换
我们都知道,JavaScript是类型松散型语言,在声明一个变量时,我们是无法明确声明其类型的,变量的类型是根据其实际值来决定的,而且在运行期间,我们可以随时改变这个变量的值和类型,另外,变量在运行期 ...
- struts基于ognl的自动类型转换需要注意的地方
好吧,坎坷的过程我就不说了,直接上结论: 在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法. 例如: 客户端表单: <s:form ac ...
- 【转】JavaScript系列文章:自动类型转换
我们都知道,JavaScript是类型松散型语言,在声明一个变量时,我们是无法明确声明其类型的,变量的类型是根据其实际值来决定的,而且在运行期间,我们可以随时改变这个变量的值和类型,另外,变量在运行期 ...
- mooc- 基本程序设计方法week1,week2
学习了第一单元我们几本可以写出10行左右的代码. week1:python编程之基本方法 1.从计算机到程序设计语言: 理解计算机:计算机是能够根据一组指令操作数据的机器. 功能性:可以进行数据计算 ...
随机推荐
- IDEA文件对比
- Django 基模板布局设置
Django 基模板布局设置 基模板 定义基础模板一般分为三块,css部分,body部分,js部分 将基础统一的部分写在基础模板中 差异部分直接 引用 {% block css %}{% endblo ...
- C#本质论第四版-1,抄书才能看下去,不然两三眼就看完了,一摞书都成了摆设。抄下了记忆更深刻
C#本质论第四版-1,抄书才能看下去,不然两三眼就看完了,一摞书都成了摆设.抄下了记忆更深刻 本书面向的读者 写作本书时,我面临的一个挑战是如何持续吸引高级开发人员眼球的同时,不因使用assembly ...
- Leetcode刷题第20天
一.找树左下角的值 题目:513. Find Bottom Left Tree Value C++ Soution 1: /** * Definition for a binary tree node ...
- Centos7+ASP.Net Core 运行
一:ASP.Net Core跨平台运行,需要在Linux安装运行环境.本机器使用的Centos,下载安装地址为:https://www.microsoft.com/net/core#centos su ...
- Cisco交换机基础命令 + Win Server08 R2 多网卡配置链路聚合
最近捣鼓服务器链路集合需要配置交换机… 以前没弄过交换机,现学现卖… 一般交换机是支持telnet的,配置好ip可以直接telnet,当然如果没配的话就要用串口了,串口要选择Serial… 还好我们万 ...
- [转] Mongoose 参考手册
Mongoose 参考手册 标签(空格分隔): MongoDB Mongoose 是什么? 一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据 ...
- UICollectionViewController的用法1
UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableVie ...
- C# 之 提高WebService性能大数据量网络传输处理
1.直接返回DataSet对象 特点:通常组件化的处理机制,不加任何修饰及处理: 优点:代码精减.易于处理,小数据量处理较快: 缺点:大数据量的传递处理慢,消耗网络资源: 建议:当应用系统在内网.专网 ...
- nginx反向代理uwsgi django服务器搭建总结
1.安装python.django.虚拟环境 参考帖子:安装python django https://blog.csdn.net/a249900679/article/details/5152720 ...