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?),並看到它效果更好。 –