【问题标题】:why should call std::move to pass s to constructor?为什么要调用 std::move 将 s 传递给构造函数?
【发布时间】:2013-10-30 04:07:19
【问题描述】:
//move the element
void StrVec::push_back(string &&s)
{
    chk_n_alloc();
    alloc.constructor(first_free++,std::move(s));
}

alloc 是分配器的对象。 不关心 chk_n_alloc()。 我只想知道 s 已经是一个右值,为什么要调用 std::move 将 s 传递给构造函数? 代码来自 C++ 入门 5th p545。

【问题讨论】:

  • 右值没有名称。 s 有一个名字,“s”

标签: c++11 move-semantics


【解决方案1】:

这是一个棘手的情况,s 作为右值引用传递,但是当你给它一个名字时,它因此是一个左值,所以你必须移动它,你可能知道这只是一个右值的转换参考。这仍然意味着必须将参数视为右值引用,因为这会阻止将非临时对象传递给它(除非它们被移动)

【讨论】:

  • 变量s没有(必然)有地址。但是表达式s 是一个左值。需要指出的是,表达式的类型和表达式的值类别是两个正交的概念。
猜你喜欢
  • 2012-08-13
  • 1970-01-01
  • 2015-03-04
  • 2013-01-22
  • 2014-01-02
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 2013-12-08
相关资源
最近更新 更多