我试图理解移动语义,右值引用std::move等等.我一直试图通过搜索本网站上的各种问题来解决,如果需要复制,为什么传递const std::string &name+ _name(name)不如std::string name+ + _name(std::move(name)).
如果我理解正确,下面需要一个副本(通过构造函数)加上一个移动(从临时到成员):
Dog::Dog(std::string name) : _name(std::move(name)) {}
Run Code Online (Sandbox Code Playgroud)
替代(和老式)方法是通过引用传递它并将其复制(从引用到成员):
Dog::Dog(const std::string &name) : _name(name) {}
Run Code Online (Sandbox Code Playgroud)
如果第一种方法需要复制并同时移动两种方法,而第二种方法只需要一个副本,那么第一种方法如何首选,在某些情况下更快?