gpt4 book ai didi

c++ - 在 C++ 中使用 C 样式数组是否有正当理由?

转载 作者:太空狗 更新时间:2023-10-29 20:39:51 25 4
gpt4 key购买 nike

在 TR1 和 C++11 中的 std::vectorstd::array 之间,动态和固定大小的数组都有安全的替代方案,它们知道它们的自己的长度,并且不会表现出可怕的指针/数组二元性。

所以我的问题是,在 C++ 中是否有任何情况必须使用 C 数组(调用 C 库代码除外),或者完全“禁止”它们是否合理?

编辑:

感谢大家的回复,但事实证明这个问题是重复的

Now that we have std::array what uses are left for C-style arrays?

所以我会指示大家改为看那里。

[我不确定如何结束我自己的问题,但如果版主(或更多有投票权的人)路过,请随时将其标记为重复并删除这句话。]

最佳答案

起初我不想回答这个问题,但我已经开始担心这个问题会被 C 程序员或将 C++ 编写为面向对象 C 的人淹没。

真正的答案是,在惯用的 C++ 中,几乎从来没有理由使用 C 风格的数组。即使在使用 C 风格的代码库时,我也通常使用 vector 。你说这怎么可能?好吧,如果你有一个 vector v 并且 C 风格的函数需要传入一个指针,你可以传递 &v[0](或者更好的是,v.data() 是同一件事)。

即使是为了性能,你也很少能为 C 风格的数组做个例子。 std::vector 确实涉及双重间接寻址,但我相信这通常会被优化掉。如果你不信任编译器(这几乎总是一个糟糕的举动),那么你总是可以使用与上面相同的技术 v.data() 来为你的紧密循环获取一个指针。对于 std::array,我相信包装器更薄。

只有当您是一位了不起的程序员并且您确切地知道自己为什么这样做时,或者如果一位了不起的程序员查看了您的问题并告诉您这样做,您才应该使用一个。如果你不是很棒并且你正在使用 C 风格的数组,那么你犯错的可能性很高(但不是 100%),

关于c++ - 在 C++ 中使用 C 样式数组是否有正当理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26327176/

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