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

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

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

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
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
Твоя функция принимает одно выражение и не принимает другое не потому, что у них разный тип, а потому что категория разная.