[英]C++ Constructor called from function by reference
我正在做一些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(int)
创建临时A
,打印'd'
。
在函数返回后,临时在表达式语句的末尾被销毁。
请注意,这仅在引用为const
或rvalue引用时才有效。 临时值不能绑定到非const 左值引用; 所以,如果参数类型是A&
,那么你应该得到一个错误。
它还要求转换可以隐式完成; 您可以通过声明构造函数explicit
来阻止此转换。
A(int n = 0): m_n(n)
{
std::cout << 'd';
}
这是一个转换构造函数。 当函数需要类型A
的参数但提供了一个int
变量时,它将使用此转换构造函数隐式转换为A
要避免此隐式转换,可以向构造函数添加explicit
说明符。
explicit A(int n = 0): m_n(n)
{
std::cout << 'd';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.