在我的课堂上,我写了下面一行:
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)) {}