笔记

//Student.h
[explicit修饰] Student (int n);
Student doh("Homer" , );
doh = ;       //没有 explicit
=>
doh = Student(5);  
doh = 5; 报错!    //有 explicit

from C++ Primer Plus

explicit Student (const std::string & s) : name(s) , scores() {}
explicit Student (int n) : name("Nully") , scores(n) {}

本书前面说过,可以用一个参数调用的构造函数将用作从参数类型到类类型的隐式转换函数;

但这通常不是好主意。在上述第二个构造函数中,第一个参数表示数组的元素个数,而不是数

组中的值,因此将一个构造函数用作int到Student的转换函数是没有意义的,所以使用explicit

关闭隐式转换。如果省略该关键字,则可以编写如下所示的代码。

Student doh("Homer" , );    //创建Homer名字的学生,并构造尺寸为10的分数数组
doh = ; //重置学生名称为Nully,重置尺寸为5的分数数组

在这里,马虎的程序员检入了doh而不是doh[0] 。如果构造函数省略了explicit,则将使用

构造函数调用Student(5)将5转换为一个临时Student对象,并使用Nully来设置成员name

的值。因此赋值操作将使用临时对象替换原来的doh值。使用explicit后,编译器将认为上述

赋值运算符是错误的。

C++和约束

C++包含让程序员能够限制程序结构的特性——使用explicit防止单参数构造函数的隐式转

换,使用const限制方法修改数据,等等。这样做的根本原因是:在编译阶段出现错误优于

在运行阶段出现错误。

c++ explicit 用法摘抄的更多相关文章

  1. mssql sqlserver for xml EXPLICIT 用法详解说明

    摘要:下文通过举例的方式,详细说明"for xml EXPLICIT"关键字的用法,如下所示:实验环境:sql server 2008 R2 EXPLICIT的功能:将数据表采用特 ...

  2. explicit用法

    explicit用来防止由构造函数定义的隐式转换. 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. 例如: class things { ...

  3. git commit --amend用法(摘抄)

    适用场景: 比方说,你的代码已经提交到git库,leader审核的时候发现有个Java文件代码有点问题,于是让你修改,通常有2种方法: 方法1:leader 将你提交的所有代码 abandon掉,然后 ...

  4. c/c++ explicit用法

    试想一个类,它的构造函数只有一个参数, class test { test( int a ) {} 4 } 这时我想用一个int b = 10初始化它,这当然没问题,但如果你用一个字符例如'c'初始化 ...

  5. mssql sqlserver xml数据类型专题

    摘要: 下文将详细讲述sql server xml数据类型的相关知识,如下所示: 实验环境: sql server 2008 R2 xml数据类型简介: mssql sqlserver xml数据类型 ...

  6. BeanShell用法汇总(部分摘抄至网络)【转】

    说明:本文部分资料摘抄至 来源: http://www.cnblogs.com/puresoul/p/4915350.html 来源: http://www.cnblogs.com/puresoul/ ...

  7. BeanShell用法汇总(部分摘抄至网络)

    说明:本文部分资料摘抄至 来源: http://www.cnblogs.com/puresoul/p/4915350.html 来源: http://www.cnblogs.com/puresoul/ ...

  8. BeanShell用法(摘抄至网络)

    说明:本文部分资料摘抄至 来源: http://www.cnblogs.com/puresoul/p/4915350.html 来源: http://www.cnblogs.com/puresoul/ ...

  9. 关于C# WinForm_Tree View的一些基本用法(摘抄)

    下面是treeview的用法TreeView组件是由多个类来定义的,TreeView组件是由命名空间"System.Windows .Forms"中的"TreeView& ...

随机推荐

  1. CoreLocation框架的使用

    CoreLocation框架使用 一.地图和定位的简介 1.应用场景 周边:找餐馆/找KTV/找电影院(团购APP) 导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达(地图APP) 2 ...

  2. C#- FTP递归下载文件

    c# ftp递归下载文件,找来找去这个最好.(打断点,一小处foreach要改成for) /// <summary> /// ftp文件上传.下载操作类 /// </summary& ...

  3. 模拟等待事件row lock waits

    是索引块分裂引起的锁等待,往往与enq: TX - index contention 伴随产生,enq:TX - index contention的解释. Waits for TX in mode 4 ...

  4. heX:用HTML5和Node.JS开发桌面应用

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. ubuntu安装日志

    默认 桌面有2个文档 一个是示例,我们选择 开始安装Ubuntu 14.10 LTS , 记得在这之前 要按Ctrl+Alt+T 打开终端,输入代码:sudo umount -l /isodevice ...

  6. [ES6] 20. Polyfills

    Polyfill is something you don't need to set up traceur but start to use es6 in today's browser.You c ...

  7. Android(java)学习笔记150:为什么局部内部类只能访问外部类中的 final型的常量

    为什么匿名内部类参数必须为final类型: 1)  从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变 ...

  8. mysql中查询某字段所在的表方法

    select TABLE_NAME from information_schema.COLUMNS where COLUMN_NAME = 'type'

  9. iframe父子窗口取值

    父窗口中操作iframe:window.frames["iframeChild"].document //假如iframe的id为iframeChild 在子窗口中操作父窗口:wi ...

  10. Bootstrap--组件之按钮组

    什么是按钮组呢?简单解释:就是把一堆的按钮放在一行或者一列中.下面来看一个实例. 按钮组嘛,首先是按钮,所以会用到.btn这个类,还有就是bootstrap提供的按钮组.btn-group这个类,所以 ...