C 와 C++ 연산자 차이점을 조건

어디서 읽었는데, 그 차이가 있는 ':' C 에서 약간 c++컴파일러는 there& 연산자입니다? # 39 의 소스 코드를 사용할 수 있는 일부 다르게 두 언어 모두. # 39, t 찾습니다찾기 죄송합니다. 내가 can& 텍스트 어디든요. 이러한 차이는 뭔지 아는 사람?

해결책

반면 C, C++ 언어로 반환할 수 있는 조건 연산자는 우바루이 유사한 기능을 사용할 수 없습니다. 이에 따라 다음은 법적고지 c++에서.

(true ? a : b) = 1;

복제할지 C 에서, 이 경우, 또는 계약을 직접 참조입니다 / 다른 방법을 했습니다.

*(true ? &a : &b) = 1;

또한, ':' 와 '=' c++컴파일러는 사업자들은 비유하 우선순위 및 그룹화할 오른쪽에서 왼쪽으로 (예:

(true ? a = 1 : b = 2);

c 는 C++ 코드 오류로 던져 유효함 할 뿐, 괄호로 묶인 채 마지막 표현식에서는:

(true ? a = 1 : (b = 2));
해설 (5)

게다가, 실질적인 차이는 주도자에게 평가를?: 발생할 수 있는 it c++컴파일러는 l 값은 같이 할 수 없다.

다른 몇 가지 정의를 차이를 볼 수 있는 실용적인 각오하랬지. C++, C 에서 정보기술 (it) 의 첫 번째 피연산 함수는 0 으로 변환한 부울 비교됩니다. 이는 =, = 등에 대한 정의 사이에 차이가! 와 똑같이 C 와 C++.

또한 이 유형의 추론 규칙에 대해 좀 더 복잡한 C++ 언어로?: 표현식에서는 및 3rd 피연산자로 가지유형의 따라 2. 이같은 가능성을 사용자정의된 암시적입니다 변환에는 c++에서.

예제 코드. 유효함 c++컴파일러는. 잘못된 C.

extern int h(int p, int q);

int g(int x)
{
        int a = 3, b = 5;

        (x ? a : b) = 7;

        return h( a, b );
}

'는' mgcc 오류: &quot, 오류: 잘못된 우바루이 assignment&quot 에서. c 로 컴파일된 C++ 코드를 컴파일할 때 있지만 오류 없이 컴파일하기를 때 있다.

  • Edit:* 비록?: # 39, C 에서, 아마도 이 문법의 한 can& 복귀하십시오 l 값은 의외로 지우시겠습니까? t: 입니다.
conditional-expression:
    logical-OR-expression
    logical-OR-expression ? expression : conditional-expression

즉, 'a? b: c = d '로 분석하고' (a? b: c) = d '비록 (& # 39, # 39 인해 l-value& 아닙니다. # 39 이 can& 규칙), t 결과: 유효한 표현식입니다.

이 문법의 변경으로부터 c++컴파일러는 이:

conditional-expression:
    logical-or-expression
    logical-or-expression ? expression : assignment-expression

반면 일부 상황에서 선택할 수 있도록 확장명은 조건식 l 값은 죽이려하겠어요 예증의표적으로 '는? b: c = d '유효한 문법 변경 없이 이제 새로운 문법 변경으로 표현식에서는 유효함 뿐만 아니라 다른 제꿈의' 는? b: (c = d) '.

비록 내가 나의 상상 그 어떤 증거도 없는 don& # 39, 문법, t break it, 기존 C 코드 호환성이 couldn& 변경하십시오 # 39 가능성이 높아지고 있는 것, 그것은 다음과 같은 적은 수의 표현식에서는 깔의 깜짝 놀랄 만한 새로운 문법

make_zero ? z = 0 : z = 1;
해설 (2)