有人知道为什么这条线与auto&编译好吗? 我用clang 3.6(C ++ 17),GCC 5.2(C ++ 17),VS2013(update5)尝试了这个,他们都允许这样做。 我知道这个例子没有多大意义,但仍然为什么通过auto来区别?
当我在TD(类型显示器)中使用Scott Meyers技巧时,它向我显示auto& b的实际类型也是A :: B.那么,为什么差异呢?
#include <iostream>
using namespace std;
class A
{
private:
class B
{
public:
void x()
{
std::cout << "inside B::x()" << std::endl;
}
};
public:
B& getB() { return m_memberB; }
private:
B m_memberB;
};
int main()
{
A a1;
//A::B& b = a1.getB(); // this doesn't compile (A::B is private...)
auto &b = a1.getB(); // this compiles!
b.x();
return 0;
}