Информация об изменениях

Сообщение Re[27]: Зачем плюс? от 02.01.2019 19:52

Изменено 02.01.2019 20:02 Максим Рогожин

Re[27]: Зачем плюс?
Здравствуйте, B0FEE664, Вы писали:

BFE>>>
BFE>>>void foo(int&& n){}

BFE>>>int main()
BFE>>>{
BFE>>>    int n = 3;
BFE>>>    foo(n);     // мы точно знаем, что у n тип int. ошибка компиляции.
BFE>>>    foo(1 + n); // ошибки компиляции нет, значит результат вычисления (1 + n)  - не int.
BFE>>>}
BFE>>>


BFE>В каком смысле — не учёл? Этот пример демонстрирует тот факт, что у n и у результата 1 + n разные типы.

Не демонстрирует. Этот пример демонстрирует, что выражение n и выражение 1 + n относятся к разным категориям выражений C++. Тип результата обоих выражений один и тот же, скорее всего.
Re[27]: Зачем плюс?
Здравствуйте, B0FEE664, Вы писали:

BFE>>>
BFE>>>void foo(int&& n){}

BFE>>>int main()
BFE>>>{
BFE>>>    int n = 3;
BFE>>>    foo(n);     // мы точно знаем, что у n тип int. ошибка компиляции.
BFE>>>    foo(1 + n); // ошибки компиляции нет, значит результат вычисления (1 + n)  - не int.
BFE>>>}
BFE>>>


BFE>В каком смысле — не учёл? Этот пример демонстрирует тот факт, что у n и у результата 1 + n разные типы.

Не демонстрирует. Этот пример демонстрирует, что выражение n и выражение 1 + n относятся к разным категориям выражений C++. Тип результата обоих выражений один и тот же — int.

Ты value categoty рассматриваешь как часть типа выражения — это не верно, value category это еще одна характеристика выражения, наряду с типом выражения.
выражение — тип выражения — категория выражения
n — int — lvalue
n+1 — int — prvalue