2
http://coliru.stacked-crooked.com/a/c795a5d2bb91ae32C++ RVO : 언제 발생합니까? <code>return a;</code> 대신 <code>return std::move(a);</code> :
#include <iostream>
struct X {
X(const char *) { std::cout << 1; }
X(const X &) { std::cout << 2; }
X(X &&) { std::cout << 3; }
};
X f(X a) {
return a;
}
X g(const char * b) {
X c(b);
return c;
}
int main() {
f("hello"); // 13
g("hello"); // 1
}
기능 f(X a)
의 마지막 줄에 어떤 차이가 있나요?
f
에는 RVO가없고 g
에는 NRVO가 있습니까?
IIRC를 사용하여'return std :: move (a); '를 사용합니다. foils RVO; true RVO는 이동자도 복사 생성자도 포함하지 않지만 'std :: move (a)'는 NRVO에 대한 규칙을 위반했기 때문에 건설이 필요하다는 것을 의미합니다. – ShadowRanger
Stephan T. Lavavej가 "Do not help the Compiler"라는 말에서 이것을 설명합니다 – tkausl
질문 당 한 가지 질문하십시오. –