为什么以下代码在Visual Studio和GCC上都崩溃了?
要使它崩溃,需要基于范围的for循环,std :: map,std :: string并引用字符串.如果我删除其中任何一个它将工作.
#include <iostream>
#include <string>
#include <map>
using namespace std;
struct S
{
map<string, string> m;
S()
{
m["key"] = "b";
}
const string &func() const
{
return m.find("key")->second;
}
};
int main()
{
for (char c : S().func())
cout << c;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Ideone链接:http://ideone.com/IBmhDH
是否保证std::vector仅在size()==capacity()调用时移动其数据,push_back()或者emplace_back()否则也可以执行此操作?