首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子: class CxString /...
可以看到在进行赋值时,Complex构造函数调用了一次,先把5.5隐式转换为Complex类对象,然后再调用operator==()进行比较。 2. 使用explicit #include <iostream>usingnamespacestd;classComplex {private:doublereal;doubleimag;public:explicitComplex(doubler =0.0,doublei =0.0) : real(r), imag(i)//注明需要显式调用...
classCxString// 使用关键字explicit的类声明, 显示转换{public:char*_pstr;int_size;explicitCxString(intsize){_size=size;// 代码同上, 省略...}CxString(constchar*p){// 代码同上, 省略...}};// 下面是调用:CxStringstring1(24);// 这样是OK的CxString string2=10;// 这样是不行的, 因为explici...
可知在int d = 5 * r中可以将int作为一个运算符重载,因此此时类对象变成了一个int型变量 用explicit的意义 注意:只能写在类声明中,不能写在类定义中 class student { public: int age; explicit student(int m): age(m) {} } int main(void) { student s(10); // 1 正常写法,通过 // student ...
explicit关键字的主要作用是防止单参数构造函数的隐式转换。当我们在类定义中使用explicit关键字修饰一个单参数构造函数时,编译器就不会自动执行该构造函数的隐式类型转换。这有助于减少程序中的潜在错误,并提高代码的可读性和可维护性。 explicit关键字的用法 下面是一个简单的例子,展示了如何使用explicit关键字: clas...
explicit关键字一般用来修饰类的构造函数,作用是告诉编译器按照实际的类型来构造函数,不允许做隐式转换,那么为什么要这样做,接下来我们举例说明。 例如:如下是一个分数的类,main函数中将分数和整数相加,这是两个不同的数据类型,之所以能相加,原因有两点: Franction类重载了操作符“+”,参数为Franction Franction构造...
1. explicit关键字 explicit的中文含义是显示的,在C++中主要用于防止隐式转换的发生。那么什么是隐式转换,以如下的代码为例 代码语言:javascript 复制 #include<iostream>using namespace std;classDemo{public:Demo(){}Demo(int a){_value1=a;}intget_value(){return_value1;}private:int _value1;};intmain...
关键字使用 所以如果不想让编译器支持构造函数的隐式转换,就使用关键字 explicit ,这样编译器就会要求必须显示的调用类的构造函数。写法: class Time { public: explicit Time(int a); }; 这时候,使用隐式转换的地方就会报错了,不再支持隐式转换。 原来C++里的隐式转换这么厉害,刚知道,所以迫不及待的就分享...
【Explicit 关键字的使用场景】 Explicit 关键字的使用场景包括但不限于以下几种情况: 1.声明变量:在声明变量时,使用 explicit 关键字可以强调变量需要显式声明,而不是隐式推断。例如,在 C++中,可以使用`explicit`关键字声明一个显式转换的变量。 2.函数参数:在函数参数中使用 explicit 关键字,可以强调该参数需要...
explicit为清晰的;明确的之意.顾名思义,关键字explicit可以阻止隐式转换的发生。 例如: C++中只带有一个参数的构造函数,或者或者除了第一个参数外其余参数都有缺省值的多参构造函数,承担了两个角色: 1.用于构建单参数的类对象。 2.隐含的类型转换操作符。