此blog为了记录c++语法的一些点
explicit
这个关键字用于有单一参数的构造函数前,为了防止构造函数中的隐式转换,例如:
class A {
public:
A(int a = 0) {
m = a;
b = 0;
}
void cmp(const A & a) {
int fuck = m/b;
}
int b;
int m;
};
A * a = new A(5);
a->cmp(6);
就可以这么去给cmp直接传一个数字,就会导致在cmp调用的时候去用6构造了A的那个对象,但是这样构造出来的A,如果有其他参数的话,其他参数没有被很好地赋值,比如说b,如果是b=0,那么cmp函数执行的时候就会悲剧。
所以为了防止隐式转换,就必须如下声明构造函数:
explicit A(int a = 5);