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