Индексирует ли новый элемент карты и имеет ли что-то, что читает его, назначенное ему неопределенное поведение, или просто неопределенное?

После ответаэтот вопросБыло долгое обсуждение того, является ли рассматриваемый код неопределенным поведением или нет. Вот's код:

std::map word_count;
word_count["a"] = word_count.count("a") == 0 ? 1 : 2;

Прежде всего, было установлено, что это было по крайней мере не определено. Результат отличается в зависимости от того, какая сторона задания оценивается первой. В своем ответе я проследил каждый из четырех полученных случаев, указав факторы, какая сторона оценивается первой и существует ли элемент до этого.

Была также короткая форма:

(x = 0) = (x == 0) ? 1 : 2; //started as
(x = 0) = (y == "a") ? 1 : 2; //changed to

Я утверждал, что это было больше похоже на это:

(x = 0, x) = (x == 0) ? 1 : 2; //comma sequences x, like [] should

В конце концов, я нашел пример, который, кажется, работал для меня:

i = (++i,i++,i); //well-defined per SO:Undefined Behaviour and Sequence Points

Возвращаясь к оригиналу, я разбил его на соответствующие вызовы функций, чтобы было легче следовать:

operator=(word_count.operator[]("a"), word_count.count("a") == 0 ? 1 : 2);
   ^       inserts element^                        ^reads same element
   |
assigns to element

Еслиword_count["a"] не существует, утверждалось, что он будет назначен дважды без последовательности между ними. Лично я нене понимаю, как это могло бы произойти, если бы две вещи, которые я считал правдой, были:

Когда выбирается сторона, подлежащая оценке, вся сторона должна быть оценена, прежде чем другая сторона может начать.

Такие конструкции, как word_count ["a"] = 1 демонстрирует четко определенное поведение даже в том случае, если элемент вставлен, а затем назначен.

Верны ли эти два утверждения? В конечном счете, это действительно неопределенное поведение, и если это так, то почему работает второе утверждение (если оно работает)? Если второе неверно, я считаю, что всеmyMap[i]++;в мире было бы плохо сформировано.

Полезная ссылка:Неопределенные точки поведения и последовательности

Ответы на вопрос(2)

Ваш ответ на вопрос