私有类型上的 Auto
在处理私有类成员时,使用 auto 声明变量可能会造成混淆。在此示例中,代码编译成功:
class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } }; int main() { Foo f; auto b = f.Baz(); std::cout << b.i; }
此代码有效吗?如果是这样,为什么?
代码确实有效。 auto 遵循与模板类型推导相同的规则。原因都是 auto b = f.Baz();和乐趣(f.Baz());编译是因为 Foo::Bar 的类型是可用的,即使它的名称是私有的。
如果它的名称是私有的,为什么类型可用?
私有类型的不可访问性仅延伸到它们的名称。类型本身仍然可以使用,从而可以将它们返回到客户端代码并将它们传递给模板函数。
以上是使用'auto”进行私有类成员类型推导在 C 中有效吗?的详细内容。更多信息请关注PHP中文网其他相关文章!