c++关键字explicit

1 修饰有参数的构造函数,只能显示调用,不能隐式调用。
2 无参数的构造函数,加与不加都一样
#include <iostream>

class A
{
    int data;
public:

    A() {
        data=0;
    }

    explicit A(int a) {
        data=a;
    }

    explicit A(int a,int b) {
        data=a+b;
    }

    ~A() {}

    void show() {
        std::cout<<"class A:"<<data<<std::endl;
    }
};

void TestClassA() {
    A a;//ok

    A a11(1);//ok
    A a12{1};//ok
    //A a13=1;//error
    //A a14={1};//error

    A a21(1,2);//ok
    A a22{1,2};//ok
    //A a23={1,2};//error
}

原文地址:https://www.cnblogs.com/smallredness/p/11025382.html

时间: 2024-10-26 02:30:05

c++关键字explicit的相关文章

Qt C++中的关键字explicit——防止隐式转换(也就是Java里的装箱),必须写清楚

最近在复习QT,准备做项目了,QT Creator 默认生成的代码 explicit Dialog(QWidget *parent = 0)中,有这么一个关键字explicit,用来修饰构造函数.以前在Windows下写程序的时候,基本上没有碰到这个关键字,那么这个关键字是做什么用的呢? 关键字 explicit 可以禁止“单参数构造函数”被用于自动类型转换,主要用于 "修饰 "构造函数. 指明构造函数只能显示使用,目的是为了防止不必要的隐式转化. 光看这一句似乎不太容易明白,下面,举

C#关键字explicit、implicit、operator 、unsafe 、fixed

今天遇到一些一般不常用,但说不定什么情况下就能用到的C#关键字. 转换关键字 explicit 定义强制转换 // Must be defined inside a class called Fahrenheit: public static explicit operator Celsius(Fahrenheit fahr) { return new Celsius((5.0f / 9.0f) * (fahr.degrees - 32)); } implicit 定义隐性转换 // User-

关键字explicit的作用(转)

C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 关于explicit关键字,先看看MSDN上的解释: This keyword is a declaration specifier that canonly be applied to in-class constructor declarations. An

类型转换关键字explicit与implicit的用法

这篇是个语法文,虽然这两个关键字比较陌生,但让自己有个印象不是坏事 explicit 明确转换与 implicit 隐含转换都是c#内的关键字,目的是让一个类型 转换到另外一个类型,最常见的例子就是由double转换到int时要使用明确转换, 而int转换到double的时候是使用隐含转换. double d = default(double); int i = default(int); //double 转换为 int 时必须明确定义类型 //否则编译器会丢出错误 i = (int)d; /

语言基础(6):关键字explicit

C++中 explicit 被用来修饰只有一个参数的构造函数,作用是调用该构造函数必须是显示的, 跟它相对应的单词是 implicit(隐含的.不言明的),类构造函数默认情况下即声明为 implicit (因此C++没有此关键字). 如果不使用该关键字,调用只有一个参数的构造函数允许通过缺省的转换操作完成,过程分为两步: 将该构造函数参数对应数据类型的数据转换为该类对象: 然后调用复制构造函数来实现构造对象: 通过一个例子来说明 explicit 作用: class String{ ??????

C# 关键字explicit(显示),implicit(隐式),类型的隐式和显式转换

class Program { static void Main(string[] args) { Adaptee ada = new Adaptee(); Target tar = ada; } } public class Adaptee { public int code = 1; } public class Target { private int data; public Target(int data) { this.data = data; } //可以进行隐式转换 public

关键字explicit

explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生.声明为explicit的构造函数不能在隐式转换中使用. class A { public: A(int x) { } }; class B { public: explicit B(int x) { } }; A a = 5;//OK隐式调用 A a1(5);//OK 显式调用 B b = 5;//ERROR B b1(5);/OK

关键字 explicit

C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色. 1 是个构造器 ,2 是个默认且隐含的类型转换操作符. 所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象. 这样看起来好象很酷, 很方便. 但在某些情况下(见下面权威的例子), 却违背了我们(程序员)的本意. 这时候就要在这个构造器前面加上explicit修饰,

【转】C++中的explicit关键字

在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上.再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决.但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的.了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用.既然C++语言提供这种特性,我想在有些时候这种特性将会非常有用. 按默认规定,只用传一个参数的构造函数也定义了一个隐式转换.举