作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将一些对象在其生命周期结束前传递给构造函数。
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
(调用字符串的 move 构造函数):
Foo(std::string a,
std::string b,
std::string c)
:a(std::move(a))
,b(std::move(b))
,c(std::move(c))
{}
在 gcc 7
上使用 -01
,我得到了以下结果:
+-------------+-----------------------+
| constructor | assembly instructions |
+-------------+-----------------------+
| const& | 192 |
| move | 264 |
+-------------+-----------------------+
为什么const&
指令少?
我认为 move 比通过复制构造函数创建新字符串更便宜。
将变量作为构造函数参数传递的经验法则是什么
这些参数的生命周期何时结束?
最佳答案
您没有调用 move 构造函数。您的参数字符串是常量。因此,当您对它们使用 std::move
时,结果是 const std::string&&
。这不会调用 move 构造函数,其签名采用 std::string&&
。
关于c++ - 为什么 move 比通过 const& 传递更昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39864497/
我正在阅读 MongoDB,并试图了解它的最佳用途。我没有看到明确答案的一个问题是哪些操作便宜或昂贵,以及在什么条件下。 你能帮忙澄清一下吗? 谢谢。 最佳答案 人们经常声称 mongodb 的写入速
我正在寻找一个主要来源(或一个非常好的解释)来支持在为 iPhone 编写软件时使用 autorelease 是危险的或过于昂贵的说法。 许多开发者都提出了这种说法,我什至听说 Apple 不推荐它,
我意识到这离微优化领域太远了,但我很想知道为什么调用 DateTime.Now 和 DateTime.UtcNow 如此“昂贵”。我有一个示例程序,它运行几个场景来做一些“工作”(添加到一个计数器)并
我是一名优秀的程序员,十分优秀!