今天随便的看了一下Effective C++,结果有个问题我以前根本没注意,可能很多人也没注意这个问题
看一下代码
#include <iostream>
using namespace std;
class A
{
public:
A(int i = 0 )
{
val = i;
}
int val;
};
void Dosomething(A Obj)
{
cout << Obj.val << endl; //执行时输出结果23
}
int main()
{
Dosomething(23); //隐式转化
return 0;
}
Dosomething()函数需要传进去的是A类的对象,但我传了一个int类型的整数23,结果一样可以运行,而且输出的结果是23,
这里进行了一个隐式转化,如果在开发中我们并不希望出现这种问题,怎么办?
使用explicit声明构造函数就可以防止这种问题
只需把构造函数声明为
explicit A(int i = 0 )
{
val = i;
}
这样,编译器编译时就出错.....
所以以后写程序时推荐这种方法声明构造函数,防止隐式转化而造成不可预想的结果