s4 和s5 分别把一个int型和char型,隐式转换成了分配若干字节的空字符串,容易令人误解。 为了避免这种错误的发生,我们可以声明显示的转换,使用explicit关键字: class String { explicit String ( int n ); //本意是预先分配n个字节给字符串 // 用C风格的字符串p作为初始化值 //… } 1. 2. 3. 4. 5....
Test(intd):data(d){//explicitcout<<"C:"<< this <<endl; } }intmain(){ Test t =100; } 拷贝构造函数如果加上了explicit,下面的语句就无法编译通过;不加可以。 #include<iostream>using namespacestd;classTest{public: Test(){}//拷贝构造函数explicitTest(constTest &t){cout<<"in copy"<<endl...
也就是说,explicit构造函数必须显式调用。 引用一下Bjarne Stroustrup的例子: 1classString{2explicitString(intn);3String(constchar*p);4};5String s1 ='a';//错误:不能做隐式char->String转换6String s2(10);//可以:调用explicit String(int n);7String s3 = String(10);//可以:调用explicit String(...
C++中explicit关键字的作用 在C++中,如果一个类有只有一个参数的构造函数,C++允许一种特殊的声明类变量的方式。在这种情况下,可以直接将一个对应于构造函数参数类型的数据直接赋值给类变量,编译器在编译时会自动进行类型转换,将对应于构造函数参数类型的数据转换为类的对象。如果在构造函数前加上explicit修饰词,则会...
Test(intd):data(d){//explicitcout <<"C:"<<this<< endl; } }intmain(){ Test t =100; } 拷贝构造函数如果加上了explicit,下面的语句就无法编译通过;不加可以。classTest{public://拷贝构造函数explicitTest(constTest &t){ data = t.data; ...
explicitTString(constchar*str){m_size=strlen(str);m_str=newchar[m_size+1];strcpy(m_str,str);} 此时,TString str2="hello"就会报错,要改成TString str2("hello")或者TString str2{“hello"}。 原则上应该在所有的单个参数的构造函数前加explicit关键字,当你有心利用隐式转换的时候再去解除explici...
//给拷贝构造函数加了explicit后只能这样了 CircleA(1.23); CircleB(123); CircleC(A); return0; } C++ inline 关键字 inline 是用来声明内联函数,引入内联函数的目的是为了解决程序中函数调用的效率问题。 这么说吧,程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行...
拷贝构造函数如果加上了explicit,下面的语句就无法编译通过;不加可以。 class Test public: //拷贝构造函数 explicit Test(const Test &t) data = t.data; int getData() return data; private: int data; ; void test(Test x) int main() Test t2(t1);//调用拷贝构造函数 ...
explicit C++中的关键字explicit主要是用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换 explicit Person(string name,int age=10,float height=170.0f):name(name),age(age),height(height){} 用户自定义转换(User-Defined Conversion) 通过用户自定义转换,每...