gpt4 book ai didi

c++ - 推断 std::array 大小?

转载 作者:太空狗 更新时间:2023-10-29 21:14:46 29 4
gpt4 key购买 nike

在下面的代码中:

template<size_t N>
int b(int q, const std::array<int, N>& types)
{
int r = q;
for (int t : types)
{
r = r + t;
}
return r;
}

int main()
{
b<2>(9, { 2,3 });
}

如何避免在为 N 调用 b 时必须指定 2?为什么不能自动推导出这种类型?没有它我得到错误:

'b': no matching overloaded function found 'int b(int,const std::array &)': could not deduce template argument for 'N'

最佳答案

C++17 std::array类模板参数推导 (CTAD)

从 C++17 开始,this new language featurenow used by the standard library现在还允许我们省略模板类型,以便以下工作:

主要.cpp

#include <array>

int main() {
std::array a{1, 2, 3};
}

而不是 std::array<int, 3> a{1, 2, 3};

测试:

g++ -ggdb3 -O0 -std=c++17 -Wall -Wextra -pedantic -o main.out main.cpp

如果我们设置 -std=c++14相反,例如,它无法编译:

error: missing template arguments before ‘a’

在 Ubuntu 18.04、GCC 7.5.0 上测试。

关于c++ - 推断 std::array 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39933567/

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