繁体   English   中英

C ++构造函数通过引用从函数调用

[英]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'

在函数返回后,临时在表达式语句的末尾被销毁。

请注意,这仅在引用为constrvalue引用时才有效。 临时值不能绑定到非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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM