一个函数的参数是int如果,那么你传递一个char类型的变量也能通过编译,编译器会为你自动转型为int.有时候这很方便,但有时候这却是恶梦.但如果这里的参数是int&,那么编译器没有能力为你干转型这件事了.(虽然道理很浅显,但平时一直没有特意注意引用的这个功能,昨天偶然之间想到了: ) )
void
TestVal(int a)
{
}
void
TestRef(int &a)
{
}
class
A
{
};
class
B
{
public
:
B(A){};
};
void
TestVal(B b)
{
}
void
TestRef(B& b)
{
}
int
main()
{
char c = 'a';
TestVal(c);
//TestRef(c);
A a;
TestVal(a);
//TestRef(a);
}
上面被注释掉的两行调用TestRef不会通过编译,虽然char可以隐式转型为int,A也可以隐式转换为B