C++中explict关键字
C++规定:对于可能只需传一个参数的默认构造函数,都定义了一种隐式调用。注意:只需传一个参数不仅指的是只有一个参数的默认构造函数,也指那些包含了定义了参数默认值的那些默认构造函数。
举例说明:
class MyClass
{
public:
MyClass();
MyClass(string s);
MyClass(int i, int y = 0);
}
这里的MyClass(string s)函数和MyClass(int i, int y = 0)函数都是可能只需传一个参数的默认构造函数
看一下使用构造函数构造类对象的情况:
- MyClass obj1;//OK,调用了MyClass()
- MyClass obj2(string("Hello World!"));//OK,调用了MyClass(string s)
- MyClass obj3(12, 12);//OK,调用了MyClass(int i, int y = 0)
- MyClass obj4(12);//同上
- MyClass obj5 = 12;//同上。但是对于obj5,实际上等价于MyClass temp(12);MyClass obj5(temp);//也就是说默认调用了默认拷贝构造函数。这就是所谓的隐式调用。
大部分情况下,隐式调用都会产生bug,而且很难察觉。基于此,C++引入explict关键字关闭这种隐式调用,避免因为隐式调用而产生的bug。
相关推荐
Web前端成长之路 2020-07-07
wbczyh 2020-07-05
tangjikede 2020-06-21
VitaLemon 2020-08-23
嵌入式移动开发 2020-08-17
iconhot 2020-06-26
Wmeng0 2020-06-14
82244951 2020-05-31
Cricket 2020-05-31
czsay 2020-05-25
FCLAMP 2020-05-19
dageda 2020-04-21
火焰雪人 2020-05-09
yundashicom 2020-05-09
junzi 2020-04-22
xuguiyi00 2020-04-11
zhaowj00 2020-04-08
是一道经常出现在前端面试时的问题。如果只是简单的了解new关键字是实例化构造函数获取对象,是万万不能够的。更深入的层级发生了什么呢?同时面试官想从这道题里面考察什么呢?下面胡哥为各位小伙伴一一来解密。
haohong 2020-04-08
付春杰Blog 2020-03-26