map<int, int> mp;
printf("%d ", mp.size());
mp[10]=mp.size();
printf("%d\n", mp[10]);
Этот код дает ответ, который не очень интуитивно понятен:
0 1
Я понимаю, почему это происходит - левая часть присваивания возвращает ссылку на базовое значение mp[10]
и в то же время создает вышеупомянутое значение, и только тогда оценивается правая сторона, используя только что вычисленный size()
карта.
Это поведение указано в любом месте на С++-стандарте? Или порядок оценки undefined?
Результат был получен с использованием g++ 5.2.1.