Сообщение Re[27]: Зачем плюс? от 02.01.2019 19:52
Изменено 02.01.2019 20:02 Максим Рогожин
Re[27]: Зачем плюс?
Здравствуйте, B0FEE664, Вы писали:
BFE>>>
BFE>В каком смысле — не учёл? Этот пример демонстрирует тот факт, что у n и у результата 1 + n разные типы.
Не демонстрирует. Этот пример демонстрирует, что выражение n и выражение 1 + n относятся к разным категориям выражений C++. Тип результата обоих выражений один и тот же, скорее всего.
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>В каком смысле — не учёл? Этот пример демонстрирует тот факт, что у n и у результата 1 + n разные типы.
Не демонстрирует. Этот пример демонстрирует, что выражение n и выражение 1 + n относятся к разным категориям выражений C++. Тип результата обоих выражений один и тот же — int.
Ты value categoty рассматриваешь как часть типа выражения — это не верно, value category это еще одна характеристика выражения, наряду с типом выражения.
выражение — тип выражения — категория выражения
n — int — lvalue
n+1 — int — prvalue
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