Java教程

std::move std::forward及使用

本文主要是介绍std::move std::forward及使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

概念

  • std::move:无条件把参数转换为右值;
  • std::forward:根据实参类型决定传递给下一层function的参数类型使用;被称为完美转发 (也叫精确传递);
    std::forward比较多的是配合 T&& 使用(使用在template代码中);其作用之一是将参数本层调用传递给下一层调用。
void log_and_consume(std::string&& message) {
    std::cout << "LOG: logging with rvalue\n";
    consume(message);
}

void log_and_consume(std::string const& message) {
    std::cout << "LOG: logging with lvalue\n";
    consume(message);
}

int main() {
    auto msg = std::string("sample message");
    log_and_consume(msg);
    log_and_consume("sample message");
}

期望的输出:

LOG: logging with lvalue
Consumes an lvalue
LOG: logging with rvalue
Consumes an rvalue

实际的输出:

LOG: logging with lvalue
Consumes an lvalue
LOG: logging with rvalue
Consumes an lvalue

折叠规则

template <class... Args>
void forward(Args&&... args) {
    f(std::forward<Args>(args)...);
}

折叠规则为:

&& && -> &&
& && -> &
& & -> &
&& & -> &
这篇关于std::move std::forward及使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!