💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
可以用单个形参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。 ```c++ class A { public: explicit A(int a) { printf("%d\n", a); } ~A() {} }; int main() { double d = 4.5; A b(d); // 显式调用,可编译 A a = d; // 隐式调用,不可编译 return 0; } ``` ## 构造函数禁用隐式调用构造 当自定义类存在一个构造函数使用指针作为参数时,需要使用 `explicit` 关键字修饰构造函数,否则可能会存在隐式构造函数调用,将数值 0 转换成该类。 ```c++ class Student { public: Student() : _data(NULL) {} explicit Student(const int* data) : _data(data) {} ~Student() {} bool operator ==(const Student& rhs) const { if (!this->_data || !rhs._data) { return false; } return *this->_data == *rhs._data; } bool operator !=(const Student& rhs) const { return !(*this == rhs); } private: const int* _data; }; int main () { int c = 19; Student p_c(&c); if (p_c != 0) { // 如果构造函数没有 explicit 修饰,这里编译器将无法检查 printf("yes!\n"); } return 0; } ```