我最近在我的代码库中看到了下面的代码(下面给出的简化版本)并且有疑问:
class B;
class A
{
public:
A():m_A("testA"){}
B& getB()
{
return m_B;
}
B* getBPtr() //== > written to explain the problem clearly
{
return &m_B;
}
private:
B m_B;
};
class B
{
public:
B(const std::string& name):m_Name(name){}
std::string getName() const
{
return m_Name;
}
private:
std::string m_Name;
};
class C
{
public:
void testFunc(B* ptr)
{
}
};
int main()
{
A a;
C c;
c.testFunc(&a.getB()); ===> is it equivalent to c.testFunc(a.getBPtr()) ?
}
答案 0 :(得分:9)
标准8.3.2 / 4的第一句话:
不得提及 引用,没有引用数组, 和没有指向参考的指针
(我的重点)
这并不意味着您不能将声明的变量的地址作为引用,它只是意味着指向引用的指针没有单独的类型。
答案 1 :(得分:2)
是的,无法获取参考地址。你总是得到被引物体的地址。
答案 2 :(得分:2)
是的,它是等效的。 获取引用的地址将返回原始地址。 由于无法从引用中获取任何其他地址, 指向引用的指针没有单独的类型。