以下代码编译并在没有警告的情况下运行。
我不清楚调用func
时会发生什么样的转换。该函数需要引用类型B
,但它接受指向类型A
的指针。删除构造函数B(PA A)
时,编译失败,声称无法初始化引用类型:
“const B&”类型引用的初始化无效来自'PA {aka A *}'
类型的表达
我不明白为什么首先调用构造函数而不是编译失败。对此有何解释?
#include <iostream>
typedef struct A
{
int x;
int y;
} *PA;
class B
{
public:
B(PA pa):m_pa(pa){}
int getPa() const{return m_pa->x;}
private:
PA m_pa;
};
void func(const B& b)
{
std::cout << b.getPa();
}
int main()
{
A a = {5,7};
PA pA = &a;
func(pA); //Why does this compile and what is the outcome??
return 0;
}