• c++ explicit 用法摘抄


    笔记

    //Student.h
    [explicit修饰] Student (int n);

    Student doh("Homer" , 10); doh = 5;       //没有 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" , 10);    //创建Homer名字的学生,并构造尺寸为10的分数数组
    doh = 5;                    //重置学生名称为Nully,重置尺寸为5的分数数组

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

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

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

    赋值运算符是错误的。

    C++和约束

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

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

    在运行阶段出现错误。

  • 相关阅读:
    js之展开收缩菜单,用到window.onload ,onclick,
    根据python上下文管理,写一个在读文件内容前后自动打开关闭文件的程序
    自定义高级版python线程池
    htmlParser的使用-链接
    shell单例-处理方案
    shell脚本默认变量值
    shell文件相关指令
    linux常用端口
    hbase离线定时入库shell脚本-小栗子
    shell 查看系统有关信息
  • 原文地址:https://www.cnblogs.com/Again/p/6039347.html
Copyright © 2020-2023  润新知