gpt4 book ai didi

C++,函数参数中的右值引用

转载 作者:IT老高 更新时间:2023-10-28 22:26:45 31 4
gpt4 key购买 nike

我正在尝试理解 rvalue 引用。我已经看到了它们是如何在构造函数中使用的,例如 std::movestd::forward,但我仍然不明白为什么这不起作用:

void func(string&& str)
{
cout << str << endl;
}
int main(int argc, char* argv[])
{
string s("string");
func(s);
}

确实如此:

template<typename T>
void func(T&& str)
{
cout << str << endl;
}
int main(int argc, char* argv[])
{
string s("string");
func(s);
}

为什么它适用于函数模板版本?

最佳答案

就像@Peter说的,T的类型被推导出为string&,C++的引用折叠规则说:

T& & ⇒ T& // from C++98
T&& & ⇒ T& // new for C++0x
T& && ⇒ T& // new for C++0x
T&& && ⇒ T&& // new for C++0x

所以func的实例化其实是:

void func(string& str)

而且它有效。

关于C++,函数参数中的右值引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30339922/

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