Что выводит следующий код на консоль?
map<int,int> m;
m[0] = m.size();
printf("%d", m[0]);
Возможные ответы:
- Поведение кода не определено, поскольку он не определен, какой оператор
m[0]
илиm.size()
выполняется сначала компилятором. Поэтому он может печатать1
, а также0
. - Он печатает
0
, потому что выполняется правая часть оператора присваивания. -
Он печатает
1
, потому чтоoperator[]
имеет наивысший приоритет для полного оператораm[0] = m.size()
. Из-за этого происходит следующая последовательность событий:-
m[0]
создает новый элемент на карте -
m.size()
получает вызов, который теперь1
-
m[0]
получает назначенное ранее возвращенное (по m.size())1
-
-
Настоящий ответ?, который мне неизвестен ^^