zoukankan      html  css  js  c++  java
  • [C++]关键字explicit

    [C++标准程序库 2.2.6]

    通过关键字explicit的作用,我们可以禁止“单参数构造函数(single argument constructor)”被用于自动型别转换。

    class Stack {
      explicit Stack(int size); // Create stack with initial size
    };
    ...
    Stack s;
    s = 40;     // Oops, creates a new Stack for 40 elements and assigns it to s

    如果没有explicit,上面那个构造函数有能力将一个int自动转型为Stack。“自动型别转换”动作会把40转换为40个元素的Stack,并指派给s。

    如果我们将构造函数声明为explicit,上述赋值操作就会导致编译错误

    注意: explicit同样也能拒绝“以复制语法进行带有转型操作的初始化”。

    Stack s1(40);  // OK

    Stack s2 = 40; // ERROR

    这是因为:

    X x; 

    Y y(x);  // explicit conversion

    X x;

    Y y = x;  // implicit conversion

    存在一个小差异。

    前者透过显式转换,根据型别X产生一个型别Y的新对象。后者通过隐式转换,产生一个型别Y的新对象。

  • 相关阅读:
    day7 反射
    day7 面向对象进阶
    day7 面向对象class()学习
    day6 subprocess模块、logging模块
    day6 hashlib模块
    day6 ConfigParser模块 yaml模块
    day6 xml文件格式的处理
    day6 shelve模块
    day6 SYS模块
    Servlet的学习之Response响应对象(1)
  • 原文地址:https://www.cnblogs.com/xlmeng1988/p/3089150.html
Copyright © 2011-2022 走看看