s4 和s5 分别把一个int型和char型,隐式转换成了分配若干字节的空字符串,容易令人误解。 为了避免这种错误的发生,我们可以声明显示的转换,使用explicit关键字: class String { explicit String ( int n ); //本意是预先分配n个字节给字符串 // 用C风格的字符串p作为初始化值 //… } 1. 2. 3. 4. 5....
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。 explicit使用注意事项: explicit 关键字只能用于类内部的构造函数声明上。 explicit关键字作用于单个参数的构造函数。 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,...
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...
编译器错误 C2558 “identifier”: 没有可用的复制构造函数或复制构造函数声明为“explicit” 复制构造函数从同一类型的另一个对象初始化某对象。 (它生成对象的副本。)如果没有定义任何构造函数,则编译器生成默认复制构造函数。 修复此错误的方法 在尝试复制其复制构造函数为private的类时,可能出现该问题。 在大多数...
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(int n);再调用默认的复制构造函数8String s4 ="Brian";//可以:隐式转换调...
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢? 如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class MyClass { public: My...
拷贝构造函数如果加上了explicit,下面的语句就无法编译通过;不加可以。classTest{public://拷贝构造函数explicitTest(constTest &t){ data = t.data; }intgetData(){returndata; }private:intdata; };voidtest(Test x){ }intmain(){Testt2(t1);//调用拷贝构造函数//Test t3 = t2;//编译不过//test(t2...
explicit关键字: 在c++中,explicit只能用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。 通过explicit对构造函数的声明,使4不会隐式的调用构造函数返回成Fraction类型 智能指针 一种像指针的类,在内部实现的对 * 和 -> 的重载 ...
explicit C++提供了关键字explicit,禁止通过构造函数进行的隐式转换。声明为explicit的构造函数不能在隐式转换中使用。 [注意]explicit用于修饰构造函数,防止隐式转换。是针对单个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造)而言。