gpt4 book ai didi

c++ - 为什么在 C++ 中使用非类型参数?

转载 作者:行者123 更新时间:2023-12-01 14:18:13 25 4
gpt4 key购买 nike

我在这里阅读了 C++ 中数组对象的文档:https://en.cppreference.com/w/cpp/container/array我看到模板标题是

template<
class T,
std::size_t N
> struct array;

为什么 N 作为非类型参数传递,而不是具有将大小作为变量的构造函数的结构?

当整个模板要用于泛型类型时,非类型参数的目的是什么?

最佳答案

非类型模板参数在编译时被消耗,用唯一值实例化模板会创建新类型或函数。然后,此信息可用于在运行时不可能进行的“配置”。这在某种程度上与模板类型是水平的——类模板参数 T 实现了可重用性 w.r.t.不同的类型,而非类型模板参数提供了不同类型的可重用性。

std::array 就是一个很好的例子。我假设它的类定义有一个数据成员,它是一个大小为 N 的普通数组,例如

template<class T, std::size_t N>
struct array {
// ...

T wrapped[N];
};

如果 N 是运行时值(例如传递给构造函数),则无法执行此类操作。

类模板的这种编译时“配置”有用的另一个例子是“小 vector ”,即具有固定缓冲区大小的容器,将动态内存分配推迟到缓冲区已满的点。此类缓冲区大小也只能使用非类型模板参数指定。鉴于内存分配可能成为性能瓶颈,此类技术非常重要。

关于c++ - 为什么在 C++ 中使用非类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63203474/

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