概述
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。MSDN上的解释:
This keyword is a declaration specifier that can only be applied to in-class constructor declarations . An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object 。
可以看到, explicit关键字的作用: 禁止隐式调用类内的单参数构造函数, 这主要包括三层意思:
(1)该关键字只能用来修饰类内部的构造函数
(2)禁止隐式调用拷贝构造函数
(3)禁止类对象之间的隐式转换
class People
{
public:
int age;
explicit People (int a)//加上了explict关键字的构造函数
{
age=a;
}
};
void foo ( void )
{
People p1(10); //方式一,显示调用,编译通过
People p3=10; //方式二,隐式调用,编译不通过
}
总结:explicit 只对构造函数起作用,用来抑制隐式转换,一般只将有单个参数的constructor声明为explicit,而copy constructor不要声明为explicit。explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 此时explicit关键字无效:
class DefString // 在类构造函数参数大于或等于两个时,explicit关键字无效
{
public:
char *pstr;
int age;
int size;
explicit DefString(int age, int size)
{
this->age = age;
this->size = size; .
}
};
最后
以上就是玩命诺言为你收集整理的C++之explicit构造函数的全部内容,希望文章能够帮你解决C++之explicit构造函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复