수명이 끝나기 전에 몇 개의 객체를 생성자로 전달하고 있습니다.const가 전달하는 것보다 이동이 더 비싼 이유는 무엇입니까?
int main(){
//I wanted to avoid short string optimization in this example.
const std::string a(25,"a");
const std::string b(25,"b");
const std::string c(25,"c");
Foo f{a,b,c};
}
Foo의 생성자에는 두 가지 옵션이 있습니다.
const&
(호출 문자열의 복사 생성자) :
Foo(const std::string & a,
const std::string & b,
const std::string & c)
:a(a)
,b(b)
,c(c)
{}
std::move
(호출 문자열의 이동 생성자) :
+-------------+-----------------------+
| constructor | assembly instructions |
+-------------+-----------------------+
| const& | 192 |
| move | 264 |
+-------------+-----------------------+
:
gcc 7
에
-01
와
Foo(std::string a,
std::string b,
std::string c)
:a(std::move(a))
,b(std::move(b))
,c(std::move(c))
{}
, 나는 다음과 같은 결과를 얻었다
이유는 0123입니다.지침이 부족합니까?
복사 생성자를 통해 새 문자열을 만드는 것보다 비용이 적게 듭니다.
변수를 생성자 인수로 전달하기위한 경험적 규칙은 무엇입니까
해당 인수의 수명이 끝나는 시점은 무엇입니까?
'main'의'a, b, c'와 매개 변수에서'const'를 제거합니다; 함수 호출에서'move'를 사용하십시오. –