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的新对象。

  • 相关阅读:
    VS2010 添加项目依赖
    人工鱼群算法 AFSA
    粒子群算法 PSO
    CUDA速度测试
    AGSO 萤火虫算法
    用于WTL工具栏的辅助类CToolBarHelper
    关于结构体内存对齐
    遗传算法 GA
    A*算法
    人工蜂群算法 ABC
  • 原文地址:https://www.cnblogs.com/xlmeng1988/p/3089150.html
Copyright © 2011-2022 走看看