gpt4 book ai didi

c++ - 将左值传递给 RValue 的参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:33 25 4
gpt4 key购买 nike

我想知道这怎么可能?

template<typename T>
void Test(T&& arg)
{
arg = 14;
}


int a = 23;
Test(a);

我的问题是函数 Test 需要一个右值类型的参数,但它似乎也接受左值类型的参数。这是为什么 ?那是因为模板的存在吗?因为如果我做这样的事情

void AnotherTest(int&& arg)
{
arg = 14;
}

那么函数要求参数是右值类型。如果有人能解释为什么模板的存在会改变行为,我将不胜感激。

最佳答案

正如您正确想象的那样,关键是它是一个模板并且参数类型被推导。当您使用左值调用 Test 时,参数类型推导规则当参数是右值引用时 将推导类型 T 为一个左值引用,因此特化变成:

template <>
void Test<int&>(int & && arg)

此时引用折叠规则开始生效,参数类型变为:

template <>
void Test<int&>(int & arg)

虽然模板采用右值引用,但如果类型是左值引用,则参数本身变成左值引用

关于c++ - 将左值传递给 RValue 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23598692/

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