c ++如何将右值引用传递给另一个函数

c++ How to pass an rvalue Reference to another function

我在 etl::queue

中使用嵌入式模板库

https://www.etlcpp.com/queue.html

etl::queue 等同于 std::queue

为了避免复制,我想实际将元素移动到队列中。

现在我的设置是这样的

  bool CETLConcurrentQueue<ElementType_T, u32QueueSize>::Add(ElementType_T &&element, const uint32_t u32Timeout)
{
   //lock mutex...
   queue.push(element);
   //do further stuff
}

现在我不使用 queue.push(std::move(element)); 因为元素已经是一个右值引用

但是,queue.push(element); 调用元素复制构造函数(已删除) 我怎样才能改为调用元素移动构造函数?

您必须使用 std::moveelement 转换为右值。由于命名变量 element 本身是一个左值,即使它的类型也是一个右值引用。

queue.push(std::move(element));

注意类型和value categories是两个独立的东西。

(强调我的)

Each C++ expression (an operator with its operands, a literal, a variable name, etc.) is characterized by two independent properties: a type and a value category.

...

The following expressions are lvalue expressions:

  • the name of a variable, a function, a template parameter object (since C++20), or a data member, regardless of type, such as std::cin or std::endl. Even if the variable's type is rvalue reference, the expression consisting of its name is an lvalue expression;