문제

다음 코드는 C/C ++에서 무엇을합니까?

if (blah(), 5) {
    //do something
}
도움이 되었습니까?

해결책

쉼표 연산자가 적용되고 값 5는 조건부의 True/False를 결정하는 데 사용됩니다.

그것은 blah ()를 실행하고 무언가를 되돌릴 것입니다 (아마도), 아마도 (아마도) 쉼표 연산자가 사용되고 5는 표현식의 참/거짓 값을 결정하는 데 사용되는 유일한 것입니다.


Operator는 BLAH () 함수의 리턴 유형 (지정되지 않은)에 대해 오버로드 될 수 있으므로 결과를 무성하게 만듭니다.

다른 팁

쉼표 연산자가 과부하되지 않은 경우 코드는 다음과 비슷합니다.

blah();
if (5) {
  // do something
}

쉼표 연산자가 과부하가 걸리면 결과는 해당 기능을 기반으로합니다.

#include <iostream>
#include <string>

using namespace std;

string blah()
{
    return "blah";
}

bool operator,(const string& key, const int& val) {
    return false;
}

int main (int argc, char * const argv[]) {

    if (blah(), 5) {
        cout << "if block";
    } else {
        cout << "else block";
    }

    return 0;
}

(Comma 운영자 과부하 시나리오를 보여주기 위해 편집되었습니다. 이에 대해 언급 한 David Pierre에게 감사합니다)

나는 이런 종류의 코드가해야 할 한 가지를 알고 있습니다. 코더를 발사해야합니다. 나는 이런 글을 쓰는 사람 옆에서 일하는 것을 아주 두려워 할 것입니다.

병리학 적 경우에는 쉼표 운영자가하는 일에 달려 있습니다 ...

class PlaceHolder
{
};

PlaceHolder Blah() { return PlaceHolder(); }

bool operator,(PlaceHolder, int) { return false; }

if (Blah(), 5)
{
    cout << "This will never run.";
}

나는 그것이 blah ()에 달려 있다고 말할 것이다.

더 광범위한 대답으로. Comma Operator (비 Overloaded)는 Ins와 같이 해결되고 첫 번째 부분을 실행하고 두 번째 부분을 반환합니다.

따라서 (foo (), bar ())가 있으면 두 함수 모두 실행되지만 표현식 값은 bar () (및 표현식의 유형)로 평가됩니다.

나는 그것에 대한 공정한 사용법이 있다고 말하지는 않지만, 일반적으로 코드를 읽기가 약간 어려운 것으로 간주됩니다. 주로 많은 언어가 그러한 구성을 공유하지 않기 때문입니다. 따라서 개인적 경험의 규칙으로서 나는 기존 표현에 코드를 추가하고 형식을 완전히 변경하고 싶지 않다면 피합니다.

예 : 나는 매크로가 있습니다 (매크로를 사용해야하는지 여부를 논의하지 않으면 때로는 당신도 그것을 쓴 당신조차도 아닙니다).

find_something (x) (x> 2)? find_fruits (x) : find_houses (x)

그리고 나는 보통 my_possession = find_something (34)과 같은 과제에서 사용합니다.

이제 디버깅 목적으로 로그를 추가하고 싶지만 찾기 기능을 변경할 수는 없습니다. 난 할 수 있습니다 :

find_something (x) (x> 2)? (log ( "과일 찾기"), find_fruits (x)) :( log ( "집을 찾고"), find_houses (x))

나는 때때로 디버깅 목적으로 이와 같은 구성을 사용합니다. 내가 Blah의 반환 값에 관계없이 If가 가까이 진실을 강요 할 때. 생산 코드에는 결코 나타나지 않아야한다는 것은 분명합니다.

다음은 C 파일 또는 C ++ 파일의 C 블록 내에서 C 코드라고 가정합니다.

무의미합니다 만약에. 그것은 blah ()라고 부르지 만 blah ()의 결과는 고려되지 않습니다. 만약에 조금도. 고려되는 유일한 것은 5이므로 IF는 항상 진실로 평가됩니다. iow이 코드를 다음과 같이 쓸 수 있습니다

blah();
// do something

어떤 것도없이 만약에 조금도.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top