4
#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;
}
上述代码在OS X上使用Xcode 7.2.1和Clang 7.0.2在调试和发布模式下成功构建和运行。当在类声明中初始化const成员变量时在调试模式下出现异常
它还使用Visual Studio Express 2013 for Windows Desktop在Windows 7上以发布模式成功构建和运行。
但是,它在Windows上以调试模式运行时会崩溃。在构造函数完成执行之前发生访问冲突。控制台输出如下:
Start...
Ctor
如果m_validators
初始化移动到初始化器列表,然后错误消失的构造函数。
这可能是一个编译器错误或者是否有错误的声明?
VS2013中的C++ 11功能集和实现不完整,所以很可能是编译器错误。尝试升级到VS2015(或为什么不VS2017?),并看到它效果更好。 –