在 C++ 中, 如果一个类含有一个参数的构造函数,C++ 允许一种特殊的声明类变量的方式。在这种情况下,可以直接将一个对应于构造函数参数类型的数据直接赋值给类变量,编译器在编译时会自动进行类型转换,将对应于构造函数参数类型的数据转换为类的对象。 如果在构造函数前加上 explicit 修饰词, 则会禁止这种自动转换,在这种情况下,即使将对应于构造函数参数类型的数据直接赋值给类变量,编译器也会报错。
1.没有explicit修饰的构造函数
#include <iostream>
class People
{
public:
int age;
People (int a)
{
age=a;
}
People (int a,int b){};
};
int main ()
{
People p1(10); //方式一
std::cout<<p1.age<<std::endl;
People* p_p2=new People(10); //方式二
std::cout<<p_p2->age<<std::endl;
delete p_p2;
People p3=10; //方式三
std::cout<<p3.age<<std::endl;
}
2.有explicit修饰的构造函数
#include <iostream>
class People
{
public:
int age;
explicit People (int a)
{
age=a;
}
People (int a,int b){};
};
int main ()
{
People p1(10); //方式一
std::cout<<p1.age<<std::endl;
People* p_p2=new People(10); //方式二
std::cout<<p_p2->age<<std::endl;
delete p_p2;
People p3=10; //方式三
std::cout<<p3.age<<std::endl;
}