按字符串的引用移动



在我的课堂上,我写了下面一行:

string t1,t2;
MyClass(std::string tmp1, std::string tmp2) : t1(from), t2(to) {}

为了提高性能,我可以将其更改为:

string t1,t2;
MyClass(const std::string &tmp1, const std::string &tmp2) : t1(from), t2(to) {}

但在这种情况下,类成员的原始参数不是共享同一个字符串吗?(两者都指向同一物体(?

让我们从最后开始:

但在这种情况下,类成员的原始参数不会共享相同的字符串吗?(两者都指向同一物体(?

每个字符串都是一个单独的值。无论从何处初始化它们,它们之间都不会共享任何内容。如果从const&初始化字符串,则数据的副本仍在制作中。

为了提高性能,我可以将其更改为:

你可以,但那改善任何事情的机会都很渺茫。您可能会跳过一个构造函数调用,但实际上,无论如何,它都会被优化掉。

编写此类代码的常用方法是按值捕获,如果需要为以后的存储值,则移出所述值;否则取const-ref。

MyClass(std::string t1, std::string t2) : t1(std::move(t1)), t2(std::move(t2)) {}

最新更新