小编Dar*_* CH的帖子

在自由功能中定义的类型,可通过自动外部访问.语言错误或功能?

让我们在自由函数中定义一个类,并在外部访问它:

#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)

c++ c++14

3
推荐指数
1
解决办法
75
查看次数

标签 统计

c++ ×1

c++14 ×1