zoukankan      html  css  js  c++  java
  • 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
    }
  • 相关阅读:
    VBScript 函数
    C#创建activex供js调用
    java调用jni
    vbscript基本语法
    javascript 与vbscript 互相调用
    java调用jni
    mysql 无权限修改user 【修改root密码问题】
    vbscript基本语法
    js九九乘法表
    100~999之间的水仙花数
  • 原文地址:https://www.cnblogs.com/whyandinside/p/2497398.html
Copyright © 2011-2022 走看看