나는 경우 사용자 정의에서와 같이 operator+()
을 예상대로 그런 다음, 다음 작품오류
class A
{
public:
A operator+(A)
{
return A();
}
};
:
A a = A() + A();
하지만, g ++ - 4.7은 다음에 대한 오류 메시지를 표시합니다.
A a = (A()) + A();
특히 오류 메시지는 012입니다..
(A())
이 표현식에서 무시되고있는 것처럼 보입니다.
제 질문은 : A a = (A()) + A();
은 컴파일해야하고 그렇지 않다면 왜 안됩니까?
참고 : 내가 #define X (Identity())
을 수행하고 X + X
을 시도했을 때 이런 일이 발생했습니다.
흥미 롭습니다. 모르는 경우 단항 더하기 연산자 (예 : +5)로 처리됩니다. – chris
@chris 이제 예제를 나누기 연산자로 변경하면 오류가 발생하지 않지만 더하기, 빼기 및 곱하기 연산자에 대해서는 오류가 발생합니다. 이 경우 바이너리 연산자 대신 단항 연산자를 구문 분석하는 것처럼 들립니다. – SirGuy