C++笔记(1)explicit构造函数
因此,某些时候,explicit 可以有效得防止构造函数的隐式转换带来的错误或者误解
----------------------------------------------------------
explicit 只对构造函数起作用,用来抑制隐式转换。如:
class A {
A(int a);
};
int Function(A a);
当调用 Function(2) 的时候,2 会隐式转换为 A 类型。这种情况常常不是程序员想要的结果,所以,要避免之,就可以这样写:
class A {
explicit A(int a);
};
int Function(A a);
这样,当调用 Function(2) 的时候,编译器会给出错误信息(除非 Function 有个以 int 为参数的重载形式),这就避免了在程序员毫不知情的情况下出现错误。
总结:explicit 只对构造函数起作用,用来抑制隐式转换。
参考:
http://blog.csdn.net/smilelance/archive/2007/03/14/1528737.aspx
http://topic.csdn.net/t/20040509/15/3046021.html
C++笔记(1)explicit构造函数的更多相关文章
- explicit构造函数
explicit构造函数 Explicit Constructors(显式构造函数)收藏 按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面 ...
- explicit构造函数的作用
explicit构造函数是用来防止隐式转换的.请看下面的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...
- [018]C++ explicit构造函数
explicit [英][ɪkˈsplɪsɪt][美][ɪkˈsplɪsɪt] adj.明确的,清楚的; 直言的; 详述的; 不隐瞒的; 看到上面的英文解释,我们应该就知道explicit构造函数是什 ...
- explicit 构造函数
一.构造函数.默认构造函数.合成的默认构造函数 构造函数,是函数名与类名同样.没有返回类型的特殊的成员函数.能够有初始化列表. 默认构造函数,没有形參.或全部形參都有默认实參的构造函数. 假设没有显示 ...
- C++笔记018:构造函数的调用规则
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 一.默认构造函数 两个特殊的构造函数 1.默认无参构造函数 当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空 ...
- Effective C++ 第0章 explicit构造函数
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class String { String ( const char* p ); ...
- 【C++笔记】explicit 指定符
用于抑制构造函数的自动隐式转换. struct A { A(int) { } // 转换构造函数 A(int, int) { } // 转换构造函数 (C++11) operator bool() c ...
- c++ explicit 构造函数
代码 #include<iostream> using namespace std; class Example { private: int data; public: Example( ...
- Effective C++学习笔记之explicit
关键字: explicit意思为“明确的”和“清楚的”,是C++的关键词,意在阻止隐式类型的转换: 使用原因: 有时候不合法的隐式转换,会让乖巧听话的程序变得不可控.所以适当地使用explicit关键 ...
随机推荐
- 百度api短信开发
公司原来有一个短信发送的功能,是调用第三方的,但是很不稳定,时不时就收不到短信,但是钱已经扣了.对于这样的事,谁都忍受不了的.于是想找一个稳定短信发送平台,第一想到的是阿里云,百度.在这两个平台上公司 ...
- markdown-js 添加表格,代码块 parse
简介 markdown-js 是将 markdown转换成 HTML 的 JavaScript 库,我再网站中使用它来预览 markdown ,但是发现它对 代码块 和 表格 是不转换的.这么鸡肋的地 ...
- PL/SQL Developer连接Oracle 11g在Win8 64位系统下乱码
PL/SQL Developer在64位系统上连接Oracle,需要安装32位Oracle client客户端,使用后,发现操作数据库出现乱码的情况.经过查找资料,解决此问题,方法如下: 需要在系统的 ...
- python:模态编程框
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- Android AsyncTask分析
---恢复内容开始--- 因为android的UI线程是不安全的,如果你UI线程里执行一些耗时任务,很容易就导致程序崩溃.并且目前网络任务也不能够在UI线程里执行.处理这些问题除了直接写一个线程以外, ...
- Android线程中设置控件
在Android中经常出现多线程中设置控件的值报错的情况,今天教大家封装一个简单的类避免这样的问题,同样也调用实现也非常的方便. 自定义类: /** * Created by wade on 2016 ...
- 初识NodeJS,一个基于GoogleV8引擎的Javascript运行环境
思考 首先我们来思考一个问题:我们都知道几乎所有现代主流浏览器都全面支持了ECMAScript 5.1版标准,而JavaScript的标准是ECMAScript.那么我们就容易认为JavaScript ...
- ExecutorService线程池应用
//线程数量 int threadNum = lists.size(); //创建一个线程池 ExecutorService pool = Executors.newFixedThreadPool(t ...
- C++ STL之vector用法总结
介绍 vector是表示可变大小数组的序列容器. 就像数组一样,vector也采用的连续存储空间来存储元素.也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效.但是又不像数组,它的大 ...
- Cocos2d-x 核心概念 - 层(Layer)
层(Layer) 一个简单的主界面是由是三个层叠加实现的,从上到下依次为,菜单层,精灵层,背景层 这个次序适用与事件的响应机制,菜单层最先接受到系统事件,然后精灵层,最后背景层 在事件传递的过程中,如 ...