【发布时间】:2015-11-18 01:05:24
【问题描述】:
复制初始化是在内存中创建Hello,然后使用复制构造函数初始化s,对吧?
std::string s = std::string("Hello")
在引入移动语义的 C++11 之后,我可以说上面的代码和这种情况一样有效(消除了复制):
std::string s("Hello");
编辑:请不要回答string。 string 只是一个类的例子。 SSO 不是我所要求的。我问一般。
【问题讨论】:
-
当您使用小于 20 个字符的字符串时(取决于实现),短字符串优化就会启动,并且无论如何都会复制所有内容。
-
@imreal 不需要正好 20 个字符。此外,短字符串优化的细节和完全依赖于实现。
-
@MateuszGrzejek,是的,这就是我写“(取决于实现)”的原因
-
如果您不想了解字符串,请将示例中的类名称更改为用户创建的类。
-
@RobK 已经晚了。 :) 我只是评论说希望答案也能涵盖一般情况。
标签: c++ c++11 copy-constructor move-semantics