是否在类调用构造函数的方法中使用静态std :: map实例化?

问题描述 投票:-1回答:2

我有一个疑问,我有一个类,我们可以说“ a”,其中的方法“ b”在体内使静态std :: map无效。问题是:

以下代码可确保调用std :: map的构造函数?还是我们有不确定的行为?

a.h

class a {
public:
    void b();
};

a.cpp

void a::b(){
    static std::map<int,int> mapB;
    bool notFound = mapB.find(0) == mapB.end();
    std::cout << "notFound: " << std::endl;
}

就我而言,此代码有效,输出为:

notFound: 1

但是正确吗?还是仅出现未定义行为的情况?

另一个疑问是,如果我有一个带有类而不是基本类型的地图,是同一回事吗?我报告了一个示例代码:

c.h

class c {
public:
    int i;
};

a.h

class a {
public:
    void b();
};

a.cpp

void a::b(){
    static std::map<int,c> mapB;
    bool notFound = mapB.find(0) == mapB.end();
    std::cout << "notFound: " << std::endl;
}
c++ constructor stl std stdmap
2个回答
1
投票

但是它是正确的吗?


1
投票

是,第一次调用b()时将执行构造函数。在8.8.4中指定:

© www.soinside.com 2019 - 2024. All rights reserved.