gpt4 book ai didi

c++ - 非模板类型参数

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

我有这个模板函数:

template<int i> void f(int a[i]) { };

int main () {
int c[10];
f(c); // Causes an error!
}

为什么我不能将 c[10] 作为非模板类​​型参数传递给模板函数?

最佳答案

记住一个看起来像数组的函数参数实际上是一个指针,所以你的模板实际上等同于

template<int i> void f(int * a);

无法从函数参数中推导出模板参数。您可以明确指定它:

f<10>(c);

但这很容易出错;一个更好的选择是通过引用传递数组,这样就可以推导出模板参数:

template<int i> void f(int (&a)[i]);

或者,在 C++11 或更高版本中,您可以使用 std::array,这是一种明智的对象类型,没有任何内置数组类型的怪癖。

关于c++ - 非模板类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21259304/

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