一个函数的参数是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
本文探讨了C++中函数参数使用引用(int&)而非值(int)时的行为差异,特别是对于不同类型间的转换限制。通过具体示例展示了当传递非预期类型的参数时,编译器如何处理这些情况。
1万+

被折叠的 条评论
为什么被折叠?



