explicit关键字只能修饰只有一个参数的类的构造函数,它的作用是表明该构造函数是显式的,跟它相对应的另一个关键字是implicit,意思是隐式的,类的构造函数默认情况下声明为implicit。
#include#include using namespace std; class CxString { public: // 字符串内存 char* _pstr; // 字符串大小 int _size; public: CxString(int size) { cout << "CxString(int size);" << endl; _size = size; _pstr = (char*)malloc(size + 1); memset(_pstr, 0, size + 1); } CxString(const char* p) { cout << "CxString(const char* p);" << endl; int size = strlen(p); _pstr = (char*)malloc(size + 1); strcpy_s(_pstr, size + 1, p); _size = strlen(_pstr); } CxString& operator=(const CxString& p) { cout << "CxString& operator=(const CxString& p)" << endl; // 避免自赋值 if (this != &p) { // 避免内存泄露 if (_pstr != nullptr) { free(_pstr); _pstr = nullptr; } int size = strlen(p._pstr); _pstr = (char*)malloc(size + 1); strcpy_s(_pstr, size + 1, p._pstr); _size = strlen(_pstr); } return *this; } ~CxString() { free(_pstr); } }; int main() { CxString string1(24); // √,CxString(int size); CxString string2("aaaa"); // √,CxString(const char* p); //CxString string3; // ×,没有默认构造函数 CxString string4 = 10; // √,隐式转换,CxString(int size); CxString string5 = "bbb"; // √,隐式转换,CxString(const char *p); CxString string6 = 'a'; // √,隐式转换,CxString(int size); 注:size为字符'c'的ASCII码 string1 = 1024; // √,隐式转换,CxString(int size); CxString& operator=(const CxString& p); system("pause"); return 0; }



