Cre*_*ris 18 c++ auto visual-studio-2012
我正在使用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();
}
Run Code Online (Sandbox Code Playgroud)
主要弹出内部的第一行,error C2248: 'A::B' : cannot access private class declared in class 'A'而第二行正常编译.我想知道,auto应该像这样工作还是Visual Studio中的另一个bug?
我没有任何其他编译器可以测试它
你甚至可以写类似的东西std::cout << b2.i << "\n";,它编译得很好
根据πάνταῥεῖ的评论,我用gcc 4.8.1尝试了ideone,它以相同的方式编译,第一行是错误,第二行是完全正常的.
Ala*_*kes 10
我相信它应该像那样工作.访问权限适用于名称,而不适用于它们所引用的实体.
即使没有auto它,例如将结果传递getB给期望a的函数也是合法的B.
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |