在C ++中,如果必须在编译时确定大小,则std :: array有什么意义?

塑料格罗夫

请原谅我的无知,在我看来这std::array是您对常规阵列的STL替代。但是因为必须将数组大小作为模板参数传递,所以它阻止我们std::array使用仅在运行时才知道的大小进行创建

std::array<char,3> nums {1,2,3}; // Works.

constexpr size_t size = 3;
std::array<char,size> nums {1,2,3}; // Works.

const buf_size = GetSize();
std::array<char, buf_size> nums; // Doesn't work.

我认为C ++中数组的一个非常重要的用例是根据运行时输入(例如,分配缓冲区以读取文件)创建固定大小的数据结构。

我为此使用的解决方法是:

// Create a array pointer for on-the-spot usecases like reading from a file.
char *data = new char[size];
...
delete[] data;

要么:

// Use unique_ptr as a class member and I don't want to manage the memory myself.
std::unique_ptr<char[]> myarr_ = std::unique_ptr<char[]>(new char[size]);

如果我不在乎固定大小,那么我知道我可以使用std::vector<char>预先定义的大小,如下所示:

std::vector<char> my_buf (buf_size);

为什么std::array选择的设计师选择忽略此用例?也许我不了解的真正用例std::array

编辑:我想表达我的问题的另一种方式也可能是-为什么设计师选择将大小作为模板参数而不是构造函数参数传递?选择后者会难以提供std::array当前具有的功能吗?对我来说,这似乎是一个故意的设计选择,我不明白为什么。

亚姆米林德

易于编程

std::array有助于在中使用的几个有益的接口和习惯用法std::vector对于普通的C样式数组,不能有.size()(没有sizeofhack),.at()(超出范围的例外)front()/back(),迭代器等。一切都必须手工编码。

许多程序员std::vector甚至可能选择编译时已知大小的数组,只是因为他们想利用上述编程方法。但这抢走了编译时固定大小数组的可用性能。
因此std::array,库制造商提供了阻止C样式数组的方法,但std::vector在编译时知道大小时避免使用s。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++中的MyType(myVar)声明有什么意义?

WebApi中的C#等待/异步,有什么意义?

在G ++编译命令中包含-std = c ++ 0x有什么意义?

在C中多次声明一个函数有什么意义?

在C ++中实现自定义数学函数(如SQRT)有什么意义?

C ++-嵌套类有什么意义?

C# 方法参数有什么意义?

C ++和C中的`.inc`文件有什么意义?您想在什么情况下使用它?

为什么C ++编译器允许在编译时在堆栈上创建未知大小的数组?

#if 1在C中的意义是什么

C中__unused属性的意义是什么?

2 维数组。为什么我必须在 C 中声明列的大小

为什么我必须在C ++中的std :: array <SomeStruct,size>初始化时为每个项目指定类型

对std :: array的引用大小在编译时不可用

有没有办法在编译时实例化所有c ++模板大小?

`std :: make_optional`有什么意义?

如果您使用的是乘法快速的体系结构,C中有什么方法可以在编译时检查?

Bootstrap 中的列排序有什么意义?

Typescript中的这段代码有什么意义?

在JavaScript中声明const有什么意义

Java中的CountDownLatch有什么意义?

Go中的单向通道有什么意义?

破坏Kotlin中的声明有什么意义?

如果您可以在没有模板的情况下做同样的事情,那么 C++ 中的模板专业化有什么意义?

与仅评估变量相比,eval / bash -c有什么意义?

在C ++中使用引用和指针有什么意义?

如果泛型类型约束还必须在c#中实现接口,则类类型约束将实现什么?

在C编程中前向声明的意义是什么?

在AWS Organization中拥有会员帐户有什么意义?