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

Mau*_*ice 2 c++

我正在做一些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'?

谢谢.

Mik*_*our 8

您正在将int值传递给想要引用值的函数A.为了提供该参数,A使用转换构造函数创建临时A(int)打印'd'.

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

请注意,这只有在引用是const或者是右值引用时才有效.临时值不能绑定到非const 左值引用; 所以,如果参数类型是A&,那么你应该得到一个错误.

它还要求转换可以隐式完成; 你可以通过声明构造函数来阻止这种转换explicit.