Чем отличается время жизни строковых литералов в этих двух случаях?
struct record { const char* id; int count; };
const char* foo()
{
std::map< const char* , size_t > counters;
#if 1
for( record r : std::initializer_list<record>{
{ "a", 1 },
{ "a", 2 },
{ "b", 3 },
{ "b", 4 },
{ "a", 5 },
{ "a", 6 },
{ "c", 7 },
{ "c", 8 },
{ "a", 9 },
})
counters[r.id]+=r.count ;
#else
for( record r : {
record{ "a", 1 },
record{ "a", 2 },
record{ "b", 3 },
record{ "b", 4 },
record{ "a", 5 },
record{ "a", 6 },
record{ "c", 7 },
record{ "c", 8 },
record{ "a", 9 },
})
counters[r.id]+=r.count ;
#endif
return counters.begin()->first;
};
Есть ли гарантии, что константный строковый литерал доживет до конца времени жизни программы?
Изменилось ли что-то в последних стандартах?