gpt4 book ai didi

c++ - 如何将L值传递给std::make_pair

转载 作者:行者123 更新时间:2023-12-02 09:48:03 25 4
gpt4 key购买 nike

std::make_pair there is only one implementation C++14 onwards

template< class T1, class T2 >constexpr std::pair<V1,V2> make_pair( T1&& t, T2&& u );


这两个参数都是R值引用,并根据 this

R-values references cannot be initialized with l-values.

    int i = 1;
char ch = 'a';
std::unordered_map<int, char> mp;
mp.insert(make_pair<int,char>(i, ch));
因此,当我尝试使用上述代码中的make_pair时,它会正确引发错误 error: cannot bind rvalue reference of type 'int&&' to lvalue of type 'int'
但是,如果我更改放置模板参数并将其称为
mp.insert(make_pair(i, ch));
我感到困惑,因为 ich都是L值。模板参数解析是将L值转换为R值,还是像这样工作?

最佳答案

make_pair的参数未声明为rvalue-reference,而是forwarding reference

Forwarding references are a special kind of references that preservethe value category of a function argument, making it possible toforward it by means of std::forward. Forwarding references are either:

  1. function parameter of a function template declared as rvaluereference to cv-unqualified type template parameter of that samefunction template:

template argument deduction的帮助下,转发参照可同时用于左值和右值。当传递左值时,模板参数将推导为左值引用,引用折叠后,功能参数也为左值引用。传递右值时,模板参数将推导为非引用,函数参数为右值引用。
另一方面,如果像 make_pair<int,char>(...)一样显式指定模板参数,则函数参数将相应地成为rvalue-reference。

关于c++ - 如何将L值传递给std::make_pair,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63432176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com