我正在做一些C++测试,我不明白下面的代码:
class A
{
public:
A(int n = 0): m_n(n)
{
std::cout << 'd';
}
A(const A& a): m_n(a.m_n)
{
std::cout << 'c';
}
private:
int m_n;
};
void f(const A &a1)
{
}
int main()
{
//Call 'f' function and prints: d
f(3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么在这里调用构造函数并打印'd'?
谢谢.
您正在将int值传递给想要引用值的函数A.为了提供该参数,A使用转换构造函数创建临时A(int)打印'd'.
在函数返回后,临时在表达式语句的末尾被销毁.
请注意,这只有在引用是const或者是右值引用时才有效.临时值不能绑定到非const 左值引用; 所以,如果参数类型是A&,那么你应该得到一个错误.
它还要求转换可以隐式完成; 你可以通过声明构造函数来阻止这种转换explicit.