Время жизни строковых литералов
От: Chorkov Россия  
Дата: 07.03.19 10:19
Оценка:
Чем отличается время жизни строковых литералов в этих двух случаях?
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;
};


Есть ли гарантии, что константный строковый литерал доживет до конца времени жизни программы?
Изменилось ли что-то в последних стандартах?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.