Как будет выполняться следующее выражение? - PullRequest
0 голосов
/ 26 июня 2019

Что выводит следующая программа?

#include <iostream>
using namespace std;

int main()
{
    int a = 2, b = 4;
    a++ = b;
    cout << a << b;
    return 0;
}

1 Ответ

4 голосов
/ 26 июня 2019

Это недопустимый код C ++.

Заявление

a++ = b;

не законно. Интуитивно понятно, что вы можете поместить что-то в левую часть выражения присваивания, только если оно представляет объект , а не значение . Например, мы не можем написать

x + y = z;

потому что x + y это значение, а не объект. Тот же принцип действует в вашем коде: выражение a++ не является чем-то, что может быть записано, поскольку оно означает «изменить a, добавив к нему единицу, а затем получить значение, которое раньше имело a». «

В комментариях к вашему вопросу говорится о формальных терминах, которые используются для описания того, что я здесь называю «ценностями» и «что-то может быть записано». Они формально называются lvalues ​​, rvalues ​​, prvalues ​​ и т. Д., И, возможно, стоит изучить их, чтобы узнать больше о том, какие виды утверждений присваивания являются законными .

...