【发布时间】:2012-03-15 17:18:57
【问题描述】:
我有一个如下所示的 API:
void WriteDefaultFileOutput(std::wostream &str, std::wstring target)
{
//Some code that modifies target before printing it and such...
}
我想知道通过这样做来启用移动语义是否明智:
void WriteDefaultFileOutput(std::wostream &str, std::wstring&& target)
{
//As above
}
void WriteDefaultFileOutput(std::wostream &str, std::wstring const& target)
{
std::wstring tmp(target);
WriteDefaultFileOutput(str, std::move(tmp));
}
或者这只是编译器应该能够弄清楚的样板?
【问题讨论】:
-
wstring 有一个移动构造函数,所以这不是已经发生的事情了吗?
-
你不能在函数调用中直接避开tmp和std::move并传递wstring(target)吗?
-
这可能是一个愚蠢的问题,但为什么传递一个普通的 const 引用不是一个选项?将某些内容(此处为字符串)写入流不应修改它,也不需要额外的私有副本。因此,我真的看不出首先制作(可能很深)临时副本然后在临时副本上使用(破坏性)移动语义的原因。当然,除了使用移动语义。
-
@Damon : 代码中的注释明确显示
//Some code that modifies target before printing it and such...。 -
啊,我真傻……错过了那个评论,谢谢。
标签: c++ c++11 move-semantics