2013-10-10 3 views
0

다음 프로그램을 고려? operator+(f,f);과 (과) 일치하지 않는 이유는 무엇입니까? 표준에 대한 언급은 인정 될 것이다.차이 (a, b)는

+1

가능한 복제본 http://stackoverflow.com/questions/13869150/rules-for-lookup-of-operators-in-c11? – Cubbi

+0

@Cubbi 중복 된 것으로 생각하지 않습니다. 오버로드 된 멤버 및 블록 범위 연산자에 관한 것입니다. –

+0

그 대답은 (a + b 대'operator + (a, b)'와는 상당히 다른) lookup 규칙을 가져 왔기 때문에 질문의 제목에 답할 수 있습니다. 그러나이 경우, 표준에 바로 가기가 있습니다. – Cubbi

답변

2

f 유형은 내장형입니다. 내장 유형의 오브젝트에 대한 조작은 사용자 정의 연산자를 고려하지 않습니다. operator+(f, f)을 호출하면 명시 적으로 강제 변환하지 않으면 발생하지 않는 두 번의 변환이 강제로 수행됩니다. 관련 절은 13.3.1.2 [over.match.oper] 단락 1 :

표현식에서 연산자의 피연산자가 클래스 또는 열거 형 유형이없는 경우 연산자는 a 내장 연산자를 사용하고 5 절에 따라 해석합니다. ...

+0

감사합니다. 나는 또한 * why * : C와의 호환성에 대해서도 설명해 주었다고 생각합니다.'f + f'와 같은 C의 유효한 표현식은 동일한 결과를 가져와야합니다. 'operator + (f, f)'와 같은 것은 C에 존재하지 않으므로, C++ 함수 호출처럼 취급하는 것이 좋습니다. 옳은? –