gpt4 book ai didi

c++ - 为什么在 C++14 中同时使用运行时大小的数组和 std::dynarray?

转载 作者:IT老高 更新时间:2023-10-28 14:00:04 28 4
gpt4 key购买 nike

Draft C++14 包括运行时大小的数组和 std::dynarray 容器。据我所知,两者之间唯一真正的区别是 std::dynarray 有一个 STL 接口(interface)(例如,beginend , size 等),而运行时大小的数组则没有。那么为什么 C++14 两者都需要呢?

我知道运行时大小的数组是核心语言的一部分,而 std::dynarray 是标准库的一部分,但是 the proposal for std::dynarray清楚地表明,在许多情况下,作者希望编译器为 std::dynarray 提供特殊支持,以便它尽可能高效,即与运行时大小的数组一样高效。因此,语言/库的区别似乎有些人为。

那么,为什么 C++14 需要运行时大小的数组和 std::dynarray?并且鉴于 std::dynarray 具有更丰富的(STLified)接口(interface),为什么不直接删除运行时大小的数组,假设 std::dynarray 可以用相等的运行时实现效率?

澄清

当我谈到“运行时大小的数组”时,我指的是 N3639 中描述的新 C++14 核心语言功能。 ,而不是传统的 C 数组或 VLA 或 C++11 中的任何内容。

最佳答案

N3639建议在 C++ 中添加具有自动存储持续时间的本地运行时大小的数组。

N2648表示为了与 C++ 实践保持一致,std::dynarray 不仅可以用于自动变量。但是为了利用效率堆栈分配,我们希望使 dynarray 在用作自动变量时可优化。

简而言之,C11 样式运行时大小的数组仅限于存储在堆栈中。 dynarray 不是,但可以在存储在堆栈上时进行优化,使其与 C11 样式运行时大小的数组一样高效(或者目标是这样)。

C11 风格的运行时大小的数组仍然是一种有用的语法,并且增加与 C 的互编译性的成本并不高:无论如何,必须实现该机制以实现高效的自动 dynarray。此外,C11 风格的运行时大小的数组是一等公民,无论程序员使用 std 库如何都存在。

实际的 C11 运行时大小的数组和 C++1y C11 风格的运行时大小的数组之间存在重要差异,其中最重要的区别是实际 C11 运行时大小的数组的运行时 sizeof支持。但它的基本用法可能是兼容的。

请注意,最后, 没有在 C++14 中添加。

关于c++ - 为什么在 C++14 中同时使用运行时大小的数组和 std::dynarray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353873/

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