我正在做一些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;
}
我不明白的是为什么在这里调用构造函数并显示“ d”?
谢谢你。
您正在将int
值传递给想要引用值的函数A
。为了提供这样的说法,临时A
使用转换构造函数创建A(int)
,打印'd'
。
函数返回后,临时表达式会在表达式语句的末尾销毁。
请注意,这仅在引用为const
或右值引用时才有效。临时值不能绑定到非常量左值引用;因此,如果参数类型为A&
,则应该得到一个错误。
它还要求转换可以隐式完成。您可以通过声明构造函数来防止这种转换explicit
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句