美文网首页
C++构造函数前面添加explicit关键字的作用

C++构造函数前面添加explicit关键字的作用

作者: 海之梦17 | 来源:发表于2017-04-14 22:04 被阅读0次

C++中的 explicit关键字主要是用来修饰类的构造函数,表明该构造函数是显式的,禁止单参数构造函数的隐式转换。

所谓隐式转换,即,将构造函数一个值(其类型为构造函数对应的数据类型)转换为一个类对象

如果C++类的构造函数只有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,通过下面的程序能很好地理解:

class MyClass

{

public:

MyClass(int num);

}

MyClass obj = 10; //ok, convert int to MyClass

上面的代码中编译器自动将整型转换为MyClass类对象,实际上等同于下面的操作:

MyClass temp(10);

MyClass obj = temp;

上面的所有的操作即是所谓的“隐式转换”。

如果要避免这种自动转换的功能,可以在声明构造函数的时候前面添加上explict关键字,将类的构造函数声明为“显示”,这样就可以防止这种自动的转换操作。

修改上面的MyClass类的构造函数为显示的,下面的代码将不能够编译通过,如下所示:

class MyClass

{

public:

explicit MyClass(int num);

}

转自博客:http://blog.csdn.net/e3399/article/details/7610430

相关文章

  • C++ explicit关键字

    C++ explicit用法 C++中的explicit关键字只能用于修饰只有一个参数的类构造函数。 它的作用是表...

  • 2020-04-16【explicit】

    explicit关键字详解 C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明...

  • C++构造函数前面添加explicit关键字的作用

    C++中的 explicit关键字主要是用来修饰类的构造函数,表明该构造函数是显式的,禁止单参数构造函数的隐式转换...

  • C++ explicit关键字与隐式类型转换

    C++ explicit关键字只能用于类内部的构造函数的声明上,且只能作用于“单个参数的构造函数”或“有多个参数,...

  • [cpp deep dive] 构造函数与explicit

    explicit explicit关键字只能修饰构造函数,其余地方不起作用. 单参数构造函数会起一个作用,即会令该...

  • c++的一些不常见关键字

    1. explicit关键字 explicit用来防止由构造函数定义的隐式转换,比如:class Base bas...

  • explicit

    C++提供了[关键字]explicit,可以阻止不应该允许的经过[转换构造函数]进行的隐式转换的发生。声明为exp...

  • C++中关键字explicit简析

    C++中关键字explicit的作用 最近学习Qt经常会遇到explicit关键字,那么简单的说一下吧。 在C++...

  • [C++11阅读][2-3-1]显式类型转换

    避免已知类型向自定义类型隐式转换 explicit关键字加在构造函数前面,可以声明此函数应当被显式调用,而不是在隐...

  • explicit关键字

    含义 explicit 清楚地 implicit 隐藏的 用来修饰类的构造函数,添加explicit 修饰符后将阻...

网友评论

      本文标题:C++构造函数前面添加explicit关键字的作用

      本文链接:https://www.haomeiwen.com/subject/dqhqottx.html