ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
712032 Топик полностью
fk0, легенда (10.11.2016 02:28, просмотров: 79) ответил =AlexD= на Эквивалентно, но нафига? В чём великая сермяжья правда?
Ни разу не эквиэвалентно! Одно -- два разных оператора (разделённых ';'). Другое -- два выражения вычисляемые в одном операторе. Результат в конкретном случае конечно одинаковый, но разница может быть: 1) Temporary objects are destroyed as the last step in evaluating the full-expression (1.9) that (lexically) contains the point where they were created... 2) A full-expression is an expression that is not a subexpression of another expression. В выражении с запятой, где создаются временные объекты, они будут уничтожены по окончанию полного выражения (на точке с запятой), а не после первой запятой. Например, есть следующая программа: #include <iostream> using namespace std; struct S { S() { cout << "S()" << endl; } ~S() { cout << "~S()" << endl; } }; int f() { cout << "f()" << endl; return 0; } int main() { int x = ( S(), f(), 42 ); return x; } Эта программа даёт такой вывод:
S()
f()
~S()
Что демонстрирует, что S разрушается после вызова f. Т.е. оператор запятая конечно это sequence point, но не full expression end. Может есть заковыристые случаи и следствия из того, что я говорю, но сходу не скажу.
[ZX]