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