2009-02-27 6 views
11

누구나이 캐스트가 1337에 happyNumber를 설정하는 것 외에 어떤 영향을 미치는지 말해 줄 수 있습니까? 다른 효과가없는 경우 어떻게 이런 코드를 작성할 수 있습니까 ??? 이것은 컴파일러 버그입니까, 아니면 C++의 숨겨진 기능입니까?여러 인수가있는 static_cast는 어떻게됩니까?

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

나는 이것이 전혀 컴파일되지 않을 것이라고 놀랐다. 실수로 두 번째 매개 변수를 설정하는 버그를 발견했습니다.이 매개 변수는 캐스팅되는 식의 함수 호출로 이동하기위한 것이 었습니다. 이로 인해 객체가 두 번째 매개 변수에서 형 변환되고 하나의 인수 만 사용하여 함수를 호출하는 불쾌한 버그가 발생했습니다. 그것은 컴파일 ... 그리고 처음에 나는의 Microsoft Visual C++ 2008

+0

완벽하게 합법적이며 버그가 없습니다. – Anonymous

+0

아, 네 말이 맞아. 그것은 나에게 너무 혼란스러워서 컴파일러 버그가되어야한다는 것을 알았습니다. 전에는 콤마 연산자를 사용하지 않았습니다. – Statement

답변

30

정적 캐스트는 하나 개의 인수 걸리지 만 인수가 표현하고, 표현이 comma operator를 포함 할 수 있습니다를 사용하고 ...

붐하지 않았다. 쉼표는 부작용에 대해 한 번에 두 개 이상의 표현식을 평가하려는 경우, 예를 들어 사용됩니다 : 당신은 단지 초기화, 조건에 대해 하나 개의 표현을 각각 평가할 수

그것은 다소 유용
int i, j; 
for (i=0, j=0; i < 10; i++,j++) { 
    // do stuff 
} 

때문에없이, 그리고 for 루프 (또는 표현식이 예상되는 다른 모든 부분)의 일부를 계속 수행하십시오. 그것은 일반적으로 가장 명확한 코드를 만들지는 않으며, 의미가 이상합니다. 여러분이 보았 듯이 쉼표로 구분 된 시퀀스는 마지막 표현식의 값으로 평가됩니다.

+0

구문에 대한 사용법을 알고 있지만 static_cast에서 기능을 파악하지 못했습니다. – Statement

+0

기능이 없습니다. 쉼표 연산자를 사용하여 일부 연산을 수행하고 결과를 캐스트합니다. – Anonymous

+0

아, 당신과 루벤 덕분에 지금은 어떻게 작동하는지 이해하고, 새로운 무언가 : – Statement