Dmi*_*try 16 c++ visual-c++ c++11
我有以下代码
class A
{
private:
class B
{
public:
void f()
{
printf("Test");
}
};
public:
B g()
{
return B();
}
};
int main()
{
A a;
A::B b; // Compilation error C2248
A::B b1 = a.g(); //Compilation error C2248
auto b2 = a.g(); // OK
a.g(); // OK
b2.f(); // OK. Output is "Test"
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我有A类和私有嵌套类B.不使用auto我不能在A之外创建A :: B的实例,但是我可以使用auto.有人可以解释这里有什么问题吗?我使用VC++ 12.0,13.0,14.0(总是相同的行为)
该类型B只能A与朋友访问A,这意味着其他代码无法引用它.另一方面,模板类型推导甚至适用于私有类型,如果您想在代码中使用任何形式的模板中的私有类型,则需要使用它A.
该auto功能基于模板类型推导并遵循相同的规则,允许呼叫auto b2 = a.g();.
| 归档时间: |
|
| 查看次数: |
643 次 |
| 最近记录: |