将临时变量传递给构造函数中的引用arg.但不是一般的功能.为什么?

use*_*855 4 c++

请考虑以下代码.
这里,A a(B())编译,即使构造函数是A(B&b); 但是print(B())不起作用.但印刷品也被宣布为印刷品(B&b); 为什么这种不一致?

#include <iostream>
using namespace std;

class B{
    public:
            char b;
};

class A {
    public:
            B b;
            A(B& b);
            A() { }
};

A::A(B& b) {
    this->b = b;
}

void print(B& b) { }

int main(){
    print(B());
    A a(B());
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*edy 6

它编译因为它没有创建一个实例A.它声明了一个名为的函数a,它返回一个A并接收一个类型为pointer-to-function-returning-B的未命名参数.因为它只是一个声明,所以它会编译.如果你a在代码的其他地方被引用,你会看到其他问题.为什么这是一个函数声明而不是对象定义,查找的术语是最令人烦恼的解析.