f(x)+(g(y))
은 먼저 g(y)
으로 전화를 걸 수 있습니까? 많은 경우 표현식의 순서가 정의되지 않았지만이 경우 괄호는 작동합니까?"(f (x)) + g (y)"는 C++에서 f (x)를 먼저 호출 할 수 있습니까?
답변
우선 순위를 무시하기위한 괄호가 있습니다. 그것들은 평가 순서에 영향을 미치지 않습니다.
엄마, 두 줄을보세요!
auto r = g(y);
f(x) + r;
이 두 함수 호출 사이 sequence point 모든 중요한 소개합니다. 그것을 할 다른 방법이있을 수 있지만,이 방법은 간단하고 명백한 것 같습니다. 괄호는 시퀀스 포인트를 도입하지 않으므로 해결책이 아닙니다.
이것은 실제로 질문 된 질문에 대답하지 않습니다. –
당신이 옳았 기 때문에 설명을하고 링크를 포함 시켰습니다. 위키 피 디아에서 C++의 시퀀스 포인트가 부족한이 정확한 사례를 보여줍니다. –
'auto && r = g (y);'가 아닌가? 그렇지 않으면 어떤 유형의'g '가 반환되는지에 따라 추가 복사본을 만들 수 있습니다. –
아니요. +
연산자가 재정의되지 않는 한 왼쪽에서 오른쪽으로 계산됩니다. 연산자의 우선 순위에 영향을 미칠 수 있다고해도 반드시 f
과 g
이 같은 순서로 평가 된 것은 아닙니다. 당신이 g
전에 평가 될 f
이 필요하면, 당신은 항상 수행 할 수 있습니다
auto resultOfF = f(x);
auto resultOfG = g(x);
resultOfF + resultOfG;
[C에서 식 평가의 주문 (의
고마워요 @rubenvb! 내 C++은 약간 녹슬 었어. 나는'자동'에 대해 몰랐다 ... –
. 그것은 C++ 11 기능이지만, 특히 정확하게이 경우에는 편리합니다 :) – rubenvb
가능한 중복 http://stackoverflow.com/questions/9437683/order-of-expression -evaluation-in-c) – devnull
http://stackoverflow.com/a/9439459/2235132 – devnull
닫기가 아니라면 위의 링크에서 표준의 관련 부분을 적어도 인용 할 수 있습니까? – devnull