• C++ explicit


    C++中, 一个参数的构造函数, 承担了两个角色。 1 是个构造器 2 是个默认且隐含的类型转换操作符。

    例如下面例子中C的构造函数C(int i)就是,既可以用来作为构造器,又可以实现隐式转换C c=2;但是有时这并不是我们想要的,就可以将这个构造函数声明为explicit,以避免将构造函数作为隐式类型转换符来使用。Copy constructor也是同样的,如果Copy constructor被声明为explicit,则这个类对象不能用于传参和函数返回值。但是仍然可以直接调用。

    // spec1_explicit.cpp
    // compile with: /EHsc
    #include <stdio.h>

    class C 
    {
    public:
        int i;
        explicit C(const C&)   // an explicit copy constructor
        {
            printf_s("\nin the copy constructor");
        }
        explicit C(int i )   // an explicit constructor
        {
            printf_s("\nin the constructor");
        }

        C()
        {
            i = 0;
        }
    };

    class C2
    {
    public:
        int i;
        explicit C2(int i )   // an explicit constructor
        {
        } 
    };

    C f(C c)
    {   // C2558
        c.i = 2;
        return c;   // first call to copy constructor
    }

    void f2(C2)
    {
    }

    void g(int i)
    {
        f2(i);   // C2558
        
    // try the following line instead
        
    // f2(C2(i));
    }

    int main()
    {
        C c, d;
        const C &cc= c;
        const C &ccc= c;
        ccc.C::C(cc);
        d = f(c);   // c is copied
    }
  • 相关阅读:
    Redis的安装和部署
    SaltStack应用grains和jinja模板-第四篇
    SaltStack部署配置Tomcat-第三篇
    python魔法方法、构造函数、序列与映射、迭代器、生成器
    python异常
    python类
    python之函数、参数、作用域、递归
    docker+openvswitch实现主机与容器的网络通信
    Docker网络和容器的通信
    docker命名空间、控制组及联合文件系统概念
  • 原文地址:https://www.cnblogs.com/whyandinside/p/2497398.html
Copyright © 2020-2023  润新知