Определяется ли это поведение кода?

Что следующий код выводит на консоль?

map<int,int> m;
m[0] = m.size();
printf("%d", m[0]);

Возможные ответы:

  1. Поведение кода не определено поскольку не определено, какой оператор m [0] или m.size () выполняется первым компилятором. Таким образом, он может печатать 1 , а также 0 .
  2. Он печатает 0 , потому что правая часть оператора присваивания выполняется первой.
  3. Он печатает 1 , потому что оператор [] имеет наивысший приоритет полного оператора m [0] = m.size () . Из-за этого происходит следующая последовательность событий:

    • m [0] создает новый элемент в карте.
    • Вызывается m.size () , которому теперь 1
    • m [0] назначается ранее возвращенный (m.size ()) 1
  4. Настоящий ответ? , который мне неизвестен ^^

39
задан ROMANIA_engineer 6 October 2017 в 19:53
поделиться