笔记

//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. Redis集群方案应该怎么做

    方案1:Redis官方集群方案 Redis Cluster Redis Cluster是一种服务器sharding分片技术.Redis Cluster集群如何搭建请参考我的另一篇博文:http://w ...

  2. Angular和jQuery的ajax请求的差别

    近期项目中使用angular,结果发现后台没法获取參数,所以,略微研究了一下两者在发送ajax时的差别. 注意angular和jquery的ajax请求是不同的. 在jquery中,官方文档解释con ...

  3. Ubuntu设置目录的读写权限(Linux命令chmod 777 dirName)

    更改文件所有者 sudo chown system_username /location_of_files_or_folders 更改文件的权限 鼠标右按钮点击文件/目录 -> 属性 权限 分页 ...

  4. phpcms 源码分析一: common.inc.php

      其实就是从网上找到的的逆雪寒的分析, 我下来之后发现格式和错字的问题,非常影响阅读,现在我就是做了下搬运工的角色, 同时将格式调整到可读性提高点而已,让各位看官稍微舒心点: 下面进入整体: < ...

  5. react 组件开发

    参考资料 https://toddmotto.com/react-create-class-versus-component/ React-Native的代码规范,React其实也基本一样~~ htt ...

  6. 利用C语言强行点击置灰的按钮

    通常很多情况下,会有这样的事情,就是: 我们在运行某些程序的时候,发现按钮置灰了,比如购买版权或者输入序列号才能够获得访问权限.某个按钮才允许点击. 其实所有的这些东西都是 别的人或者公司利用一些编程 ...

  7. Jquery关闭离开页面时提醒

    [导读] 离开页面提示多般是放到了发新闻或写日志的页面,我们在百度空间或QQ空间在我们未保存信息时如果离开页面都有提示了,下面我来介绍利用jquery的beforeunload来实现此方法. jque ...

  8. css-01

    1.CSS:级联样式表,设置页面的样式 2.css基本的语法:     属性:值; 3.CSS的引入   |-1.元素内容的引入:内联样式       <元素名 style="属性:值 ...

  9. sql 游标循环遍历

    写存储过程的时候碰到一个需要对数据进行遍历循环操作的问题,最后通过游标解决了,感觉很适用. declare @level varchar() declare @uid varchar() declar ...

  10. C#类和成员定义

    1 定义类     C#用关键字class来定义类.默认情况下,类声明为内部(internal)的,即只有当前项目中的代码才能访问它.与之相对应的,还可以用public关键字来修饰,这样该类还可以由其 ...