разница в том, что [i ++] будет обращаться к индексируемому элементу i.
a [++ i] будет обращаться к индексируемому элементу i + 1.
В обоих случаях после выполнения[++ i / i ++]
я буду i + 1.
Это может создать проблемы, потому что вы не можете сделать предположение о параметре order
function (i ++, i ++, i ++)
увеличит i в 3 раза, но вы не знаете, в каком порядке.если изначально я равен 4, вы также можете иметь функцию (4,5,6)
, но также функцию (6,5,4) или также функцию (6,4,5).
и это все еще ничего, потому что я использовал в качестве примера нативные типы (например, "int"), когда у вас есть классы, дела идут хуже.
Когда перегрузка оператора не изменяется, то меняется его приоритет.и это тоже может вызвать проблемы.
Таким образом, в одном случае «++» применяется перед возвратом ссылки, в другом случае применяется «после» возврата ссылки.И когда вы перегружаете его, вероятно, лучше применить его перед возвратом в ссылку (поэтому ++ что-то намного лучше чем что-то ++, по крайней мере, с точки зрения перегрузки.)
взять универсальный класс с перегруженным ++ (изу нас есть 2 элемента, foo и bar)
foo = bar ++; //is like writing (foo=bar).operator++();
foo = ++bar; // is like writing foo= (bar.operator++());
, и есть большая разница.Особенно, когда вы просто не назначаете свою ссылку, а делаете с ней что-то более сложное или внутренне ваш объект имеет дело с мелкими копиями глубоких копий VS.