nak*_*iya 5 c++ move-semantics c++11
因此,我一直在阅读关于std::move,std::forwardrvalues,左值等广告在SO和其他地方.但我发现我无法掌握它.即使我有时会进行修复,但我认为我理解了关于指针,引用等的基本内容,这些都是在C++之前的所有内容.是我还是这些东西太重了?
如果您还没有,我建议您阅读原始提案:
它非常清楚地列出了可以通过rvalue引用和移动语义解决的问题,以及如何使用rvalue引用和移动语义来解决这些问题.
标准委员会的论文通常很密集,难以理解,但这篇论文非常容易阅读,非常值得一读.最终C++ 0x标准中指定的rvalue引用和移动语义(无论何时发生)可能与本文中提出的不同,但概念仍然相同.
你的问题很笼统。也许我可以帮助你开始:
std:move()和std::forward()Matrix z = a + b + c + d;在 C++03 代码中,计算(with Matrix a,b,c,d;)的临时数operator+来实现自己。Matrix如果您想查看 的简单用法std::move():帮助编译器避免引入返回值的副本:
Image——复制成本很高。发明一个工厂函数,其工作原理如下:
图像 load_matching_size(const char *fn_small, const char *fn_big) {
对<图像> ii = load_2_images(fn_small, fn_big);
返回 ii.first.width() >= 64 ?ii.第一:ii.第二;
}
你能数一下临时工的数量吗?请注意,return需要额外一份并复印!(该示例的设计使得返回值优化(“RVO”)不应该成为可能)
ii将被丢弃。编译器可以使用 then 作为返回值吗?(不,不可能。如果我们只有一个,RVO 就可以工作Image)。movein ,return您可以告诉编译器您不需要ii进一步的操作,并且它可以将其用于返回。因此,我可以使用move-c'tor而不是copy-c'tor进行返回,从而节省昂贵的副本。| 归档时间: |
|
| 查看次数: |
537 次 |
| 最近记录: |