让我们在自由函数中定义一个类,并在外部访问它:
#include <iostream>
auto myFunc(){
class MyType{public: int i = 0; int j = 1;};
return MyType();
}
int main() {
auto my_type = myFunc();
std::cout << my_type.i << " " << my_type.j << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它编译,按预期运行:
0 1
Run Code Online (Sandbox Code Playgroud)
名称MyType已正确隐藏:如果我们替换auto,则以下内容将无法编译:
int main() {
MyType my_type = myFunc();
std::cout << my_type.i << " " << my_type.j << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
标准对此有何评价?
怎么预防呢?以下代码没有帮助:
namespace{
auto myFunc(){
class MyType{public: int i = 0; int j = 1;};
return MyType();
} …Run Code Online (Sandbox Code Playgroud)