gpt4 book ai didi

如果不使用 '&',C++ 模板无法推断引用类型

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

这是一个非常简单的例子:

#include <iostream>

template<typename T>
void DoubleMe(T x) {
x += x;
}

int main()
{
int a = 10;
DoubleMe(a);
std::cout << a; //displays 10 not 20!
}

在这种情况下,我是否被迫在函数参数中使用“T&”?因为我在一些教程中读到,模板可以通过在变量前定义一个简单的“T”来正确推断出适当的数据类型,包括 T*、T[] 或 T&。帮忙?

最佳答案

您确实可以使用普通的 T 正确地推断出引用类型。不幸的是,这并不意味着您认为的意思。

给定

template <typename T> struct S { };
template <typename T> void f(S<T>) { }
int main() { f(S<int&>{}); }

f 的类型参数被正确推导为 int&

问题是,在您的情况下,将 T 推导为 int 已经产生了一个完全有效的函数。也许有点过度简化,但类型推导会产生使调用有效的最简单的 T。在您的情况下,T = int 使调用有效。不是您希望它工作的方式,但编译器无法知道。 T = int & 也会使调用工作,但它不是最简单的 T 使它工作。

关于如果不使用 '&',C++ 模板无法推断引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34495592/

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