c – 在类声明中初始化const成员变量时在调试模式下的异常
发布时间:2020-12-16 07:21:51 所属栏目:百科 来源:网络整理
导读:#include functional#include map#include string#include iostreamclass X{public: X() { std::cout "Ctorn"; }private: typedef std::mapstd::string,std::functionvoid() ValidatorType; const ValidatorType m_validators = ValidatorType { { "some-st
#include <functional> #include <map> #include <string> #include <iostream> class X { public: X() { std::cout << "Ctorn"; } 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编译器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容