Теоретично при виконанні i++ створюється копія i, яку буде повернено як результат операції, тому ++i (де ця копія не створюється) має працювати швидше, але це все дуже компіляторозалежне.
isbear@monstruozo:~$ echo $'#include\t<stdio.h>\nint main (void)\n{\nint i=2, b=10;\n\n\twhile (i<10000) {\n\t\tb += i++;\n\t\tprintf ("%d, %d", i, b);\n\t}\n\treturn 0;\n}\n' > t.cisbear@monstruozo:~$ gcc -O3 -o to.s -S t.cisbear@monstruozo:~$ sed -i -e 's/i++/++i/' t.cisbear@monstruozo:~$ gcc -O3 -o tr.s -S t.cisbear@monstruozo:~$ diff -u to.s tr.s--- to.s 2007-11-11 22:05:57.000000000 +0200+++ tr.s 2007-11-11 22:06:06.000000000 +0200@@ -18,12 +18,12 @@ .LCFI2: .p2align 4,,7 .L2:- addl %ebx, %ebp incl %ebx xorl %eax, %eax- movl %ebp, %edx- movl %ebx, %esi movl $.LC0, %edi+ addl %ebx, %ebp+ movl %ebx, %esi+ movl %ebp, %edx call printf cmpl $10000, %ebx jne .L2isbear@monstruozo:~$
_Self& operator++() { _M_node = _M_node->_M_next; return *this; } _Self operator++(int) { _Self __tmp = *this; _M_node = _M_node->_M_next; return __tmp; }
Цитата: Михайло Даниленко від 2007-11-11 20:50:31Теоретично при виконанні i++ створюється копія i, яку буде повернено як результат операції, тому ++i (де ця копія не створюється) має працювати швидше, але це все дуже компіляторозалежне.Залежить, звичайно. Але якщо говорити про gcc, то такий ефект є. 2markus: а як ви заміряли? Протестуйте з stl-ними ітераторами, там сумнівів не має залишатись. З gcc преінкремент швидший.
time ./test_op1
time ./test_op2
Код на С в них (test_op1, test_op2) ідентичний, окрім того в одній робиться nCount++, а в іншій ++nCount, nCount типу int.
Проте все-таки цікаво інше: на сучасних апаратах скільки воно виграє? Одну соту долю наносекунди? Хіба це допомагає продати більше копій софта й сильно задовільняє кінцевого юзвєря?..
Я-б, наприклад, зовсім інші запитання на співбесіді задавав навіть звичайним кодерам, які по-суті систему не дизайнять, а тільки вбивають код по вже готовій схемі. А в Яндексі взагалі гасло: можеш і взагалі не вміти програмувати — навчимо. Важливо-ж зовсім інше...