我正在使用Visual Studio 2012,而且我發現有些奇怪的東西。我不是在編寫一些我需要在多個編譯器中兼容的東西,但它可能會變得更晚(當代碼放在Web上時,用戶不想要編譯器錯誤),但我不想寫這是錯誤的,或者不是本地的。「自動」類型演繹編譯雖然顯式類型給出錯誤
因此,這是試驗的代碼:
class A{
class B{
public:
int i;
};
B myB;
public:
B& getB() { return myB; }
};
int main()
{
A a;
A::B& b = a.getB();
auto& b2 = a.getB();
}
第一線的內側主彈出error C2248: 'A::B' : cannot access private class declared in class 'A'
而第二線通常編譯。我想知道,汽車應該這樣工作還是這是Visual Studio中的另一個錯誤?
我沒有任何其他的編譯器,我可以
測試它你甚至可以寫的東西一樣std::cout << b2.i << "\n";
和它編譯完美的罰款
按πάνταῥεῖ的評論,我想ideone用gcc 4.8 .1和它以相同的方式編譯,第一行是錯誤,第二行是完全正確的。
_'PS:我沒有任何其他編譯器可以用'__對其進行測試:http://isocpp.org/blog/2013/01/online-c-compilers特別是http://rise4fun.com/ vcpp –
有趣。我從來沒有考慮過這樣的事情的合法性,但它似乎也用gcc和clang編譯。 –
用'main'中的代碼初始化'b'和'b2',輸出語句導致[*未定義的行爲*](http://en.wikipedia.org/wiki/Undefined_behavior)爲'b'和' b2'是對已經被破壞的對象 –