Рубрики

Предварительное увеличение (или предварительное уменьшение) в C ++

В C ++ предварительное увеличение (или предварительное уменьшение) может использоваться как l-значение , но после увеличения (или последующее уменьшение) не может использоваться как l-значение.

Например, следующая программа печатает a = 20 (++ используется как l-значение)

// Программа CPP для иллюстрации
// Предварительное увеличение (или предварительное уменьшение)
#include <cstdio>

  

int main()

{

    int a = 10;

  

    ++a = 20; // работает

  

    printf("a = %d", a);

    getchar();

    return 0;

}

a = 20

Вышеприведенная программа работает, в то время как следующая программа завершается с ошибкой при компиляции с ошибкой «не-lvalue в присваивании» (a ++ используется как l-значение)

// Программа CPP для иллюстрации
// Пост-инкремент (или пост-декремент)
#include <cstdio>

  

int main()

{

    int a = 10;

    a++ = 20; // ошибка

    printf("a = %d", a);

    getchar();

    return 0;

}

prog.cpp: In function 'int main()':
prog.cpp:6:5: error: lvalue required as left operand of assignment
 a++ = 20; // error 
     ^

Чем ++ a отличается от a ++ как lvalue?

Это связано с тем, что ++a возвращает значение lvalue , которое в основном является ссылкой на переменную, которую мы можем назначить дополнительно — как обычная переменная. Он также может быть назначен для ссылки следующим образом:

int &ref = ++a; // valid
int &ref = a++; // invalid

Принимая во внимание, что если вспомнить, как a++ , он не сразу увеличивает значение, которое он содержит. Для краткости вы можете думать об этом как о приращении в следующем утверждении. Итак, что в основном происходит, так это то, что a++ возвращает значение r , которое в основном является значением, подобным значению выражения, которое не сохраняется. Вы можете думать о a++ = 20; после обработки:

int a = 10;

// On compilation, a++ is replaced by the value of a which is an rvalue:
10 = 20; // Invalid

// Value of a is incremented
a = a + 1;

Это должно помочь понять, почему a++ = 20; не сработает

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Предварительное увеличение (или предварительное уменьшение) в C ++

0.00 (0%) 0 votes