우리는 생성 된 임시 생성 수를 줄이는 방법을 보여주기 위해 RVO와 함께 작업하고 있습니다.복수 반환을 사용하는 RVO 연산자
나는 그것의 기초를 얻지 만 여러 값을 결합하여 한 줄로 돌아가는 방법을 이해하는 데 어려움을 겪고 있습니다.
const A operator + (const A &tmp)
{
return A(this->x + tmp.x);
}
그러나 나는 여러 값을 가진 함수에이를 적용하는 방법을 확실 해요 : 단일 임시 최적화를위한
나는
const A operator + (const A &tmp)
{
A sum;
sum = this->x + tmp.x;
return sum;
}
이 감소 될 수있다 매우 쉽게 이해 할 수 있었다 돌려 주다. 예를 들어 : 뒤에
Vect2D operator - (const Vect2D &tmp) const;
Vect2D Vect2D::operator - (const Vect2D &tmp) const
{
Vect2D sum;
sum.x = this->x - tmp.x;
sum.y = this->y - tmp.y;
return (sum);
};
내 프로세스는 다음과 같습니다
오류가 "no argument takes the value (float, float)
"를 말해 함께 돌아 오기
Vect2D Vect2D::operator - (const Vect2D &tmp) const
{
return Vect2D((this->x - tmp.x), (this->y - tmp.y));
};
.
내가 초기
Vect2D 연산자를 재구성해야 할 것입니다 - CONST (CONST는 & TMP를 Vect2D);
두 개의 부동 인수를 사용할 수 있습니까? 아니면 내가 잘못 생각한거야?
, 감사합니다E : 나는 이중 부동 소수점 연산자로 할 필요가 생각했던 긍정을위한 매트과 제리에 감사합니다.
정확한 질문이 무엇인지 모르겠다. 임시 테이블이 너무 많아 수정해야하는 코드 조각을 게시 할 수 있습니까? –
(N) RVO는 일반적으로 허용되는 컴파일러 최적화를 제어하는 as-if 규칙의 예외입니다. 그것은 당신이 그 규칙을 사용하면서 컴파일러를 풀기 위해 노력하고있는 것 같습니다 (대부분의 고역에서). – Deduplicator
'Vect2D ((this-> x-tmp.x), (this-> y-tmp.y));) 행은 두 개의 인수를 취하는 생성자를 사용하여'Vect2D'를 생성하려고 시도합니다. 오류 메시지는 생성자가 없다는 것을 나타내므로 추가해야합니다. –