c – 在类声明中初始化const成员变量时在调试模式下的异常

#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的初始化移动到构造函数初始化列表,则错误消失.

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

最佳答案 我尝试用VS2015构建你的代码,它在调试版本中运行良好.我得到了这个输出:

Start...
Ctor
Complete...

没有任何“崩溃”.

它可能是VS2013的编译器错误.您可能希望升级到新的C编译器.

点赞