1. 类类型隐式转换陷阱
C++ 的类类型的转换规则如下:
- 转换函数定义在源对象(转换对象)类中,是转换源对象的成员函数。
- 一旦为转换源类型提供了到目标类型的转化函数,就可以将源类对象以隐式转化的方式转换得到目标类型对象。
- 当没有定义转换函数时,编译器会尽力把源对象转化为目标对象,且容易触发隐私转换,不一定报错。
- 实验:
class Test
{
private:
int m_var;
public:
Test(int num)
{
m_var = num;
}
int GetVar()
{
return m_var;
}
};
int main(int argc, char *argv[])
{
Test obj_A = 0;
obj_A = 2;
cout << "obj_A.GetVar() = " << obj_A.GetVar() << endl; // obj_A.GetVar() = 2
obj_A = 3.14;
cout << "obj_A.GetVar() = " << obj_A.GetVar() << endl; // obj_A.GetVar() = 3
}
以上在将整形字面量 2 和浮点型字符量 3.14 分别赋值给类对象 obj_A 时,编译器会尽力地进行类型转,例如:
obj_A = 2; => obj_A = Test(2);
obj_A = 3.14; => obj_A =</