source

C++에서 작업할 때 여러 개의 감소 연산자가 C에서 작동하지 않는 이유는 무엇입니까?

factcode 2022. 8. 29. 22:04
반응형

C++에서 작업할 때 여러 개의 감소 연산자가 C에서 작동하지 않는 이유는 무엇입니까?

이 질문을 보고 몇 가지 코드를 시험해 보겠습니다.

int x = 100;

while ( 0 <-------------------- x )
{
    printf("%d ", x);
}

컴파일을 시도했습니다.gcc다음 오류가 발생했습니다.

file.c: In function 'main':
file:c:10:27: error: lvalue required as decrement operand
 while ( 0 <-------------------- x )

하지만 컴파일은g++이 코드는 C++에서는 유효하지만 C에서는 유효하지 않은 이유는 무엇입니까?

주식회사,--x값은 값이지 l값이 아닙니다.그 효과는 감소한다.x새로 할당된 값으로 평가합니다.x.부터--x는 l값이 아니므로 감소시킬 수 없습니다.

C++에서는--xr값이 아닌 l값입니다.그 효과는 감소한다.x, 및 평가 대상xlvalue로 지정합니다.부터--x값이 다시 l값이므로 다시 감소할 수 있습니다.

이치에 맞는 이유--xC++에서 l값이 되는 것은 C++가 기준 유형을 도입했기 때문입니다.정해진

void f(int &);
int i;

전화하는 것이 말이 될 수도 있다f(--i), 이것은 통과합니다.i기준치입니다.

C에는 레퍼런스 타입이 없기 때문에 의미가 없습니다.--ilvalue가 됩니다.지금까지 C++와는 달리 C는 규칙을 변경해야 하는 설득력 있는 이유를 얻지 못했습니다.

C++에서는, 보다 광범위한 변경이 필요했습니다.--xlvalue를 설정합니다.만들기--xlvalue는 다른 어떤 것도 없이--x에 대한 수정 사이에 시퀀스 포인트가 존재하지 않기 때문에 정의되지 않은 동작x및 후속 l-value-to-value 변환.더 명확하게 말하면----x. C++는 동작시키기 위해 시퀀스 규칙을 수정해야 했습니다.C에서는 시퀀스 규칙을 변경하면 기존 컴파일러가 새로운 규칙을 준수하는 데 문제가 발생할 수 있으므로 큰 이점이 없는 한 이러한 변경은 거부될 수 있습니다.

언급URL : https://stackoverflow.com/questions/42355908/why-dont-multiple-decrement-operators-work-in-c-when-they-work-in-c

반응형