代码之家  ›  专栏  ›  技术社区  ›  ksl

在类声明中初始化常量成员变量时,调试模式中出现异常

  •  4
  • ksl  · 技术社区  · 7 年前
    #include <functional>
    #include <map>
    #include <string>
    #include <iostream>
    
    class X
    {
    public:
        X()
        {
            std::cout << "Ctor\n";
        }
    
    private:
        typedef std::map<std::string, std::function<void()>> ValidatorType;
    
        const ValidatorType m_validators = ValidatorType
        {
            {
                "some-string",
                []()
                {
                    // validation code
                    std::cout << "Validating...\n";
                }
            }
        };
    };
    
    int main()
    {
        std::cout << "Start...\n";
    
        X x;
    
        std::cout << "Complete...\n";
    
        return 0;
    }
    

    以上代码使用Xcode 7.2.1和Clang 7.0.2在OS X上以调试和发布模式成功构建和运行。

    它还使用Visual Studio Express 2013 for Windows Desktop在Windows 7上以发布模式成功构建和运行。

    但是,在Windows上以调试模式运行时,它会崩溃。在构造函数完成执行之前发生访问冲突。控制台输出如下:

    Start...
    Ctor
    

    m_validators

    这可能是编译器错误还是声明有问题?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mr.C64    7 年前

    我尝试用VS2015构建代码,在调试构建中运行良好。我得到了这个输出:

    Start...
    Ctor
    Complete...
    

    没有任何“碰撞”。