문제

누구 든지이 캐스트가 효과를 위해 무엇을 가지고 있는지 말해 줄 수 있습니까 (1337으로 해피 오너를 설정하는 것 외에도), 다른 효과가 없다면 어떻게 이런 식으로 코드를 쓸 수 있습니까 ??? 이것은 컴파일러 버그입니까, 아니면 C ++의 "숨겨진 멀리 떨어진 기능"입니까?

int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);

나는 이것이 전혀 컴파일 할 것이라는 것에 놀랐다. 실수로 두 번째 매개 변수를 캐스트되는 표현식의 함수 호출로 설정하는 것으로 설정 한 버그를 통해 찾았습니다. 이로 인해 객체가 두 번째 매개 변수에서 캐스팅 된 불쾌한 버그가 발생하여 하나의 인수만으로 함수를 호출했습니다. 그것은 편집되었고 ... 처음에는 붐을 일으키지 않았습니다 ...

Microsoft Visual C ++ 2008을 사용하고 있습니다.

도움이 되었습니까?

해결책

정적 캐스트는 하나의 주장을 가져 오지만 그 주장은 표현이며 표현에는 다음을 포함 할 수 있습니다. 쉼표 운영자. 쉼표는 부작용에 대해 한 번에 두 개 이상의 표현을 평가하려는 상황에서 사용됩니다.

int i, j;
for (i=0, j=0; i < 10; i++,j++) {
    // do stuff
}

그것 없이는 이니셜 라이저, 조건에 대해 각각 하나의 표현식 만 평가할 수 있고 For 루프의 일부를 계속 평가할 수 있기 때문에 다소 유용합니다 (또는 다른 장소가 예상되는 다른 장소). 그러나 그것은 일반적으로 가장 명확한 코드를 만들지 않으며 의미론은 이상합니다. 당신이 관찰했듯이, 쉼표로 구분 된 시퀀스는 마지막 표현의 값으로 평가됩니다.

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