在 TR1 和 C++11之间std::vector和std::array中,动态和固定大小的数组都有安全的替代方案,它们知道自己的长度并且不会表现出可怕的指针/数组二元性。
所以我的问题是,在 C++ 中是否有任何情况必须使用C 数组(而不是调用 C 库代码),或者完全“禁止”它们是否合理?
编辑:
感谢大家的回答,但事实证明这个问题是重复的
现在我们有了 std::array C 风格的数组还有什么用?
所以我会指示大家去那里看看。
[我不知道如何结束我自己的问题,但如果版主(或更多有投票权的人)路过,请随时将其标记为重复并删除这句话。]
我一开始并不想回答这个问题,但我已经开始担心这个问题会被 C 程序员或将 C++ 编写为面向对象 C 的人所淹没。
真正的答案是,在惯用的 C++ 中,几乎没有理由使用 C 样式数组。即使使用 C 风格代码库,我通常也使用向量。你说这怎么可能?好吧,如果你有一个向量 v 并且 C 风格的函数需要传入一个指针,你可以传递 &v[0] (或者更好的是, v.data() 是同一件事)。
即使就性能而言,也很少能采用 C 样式数组。std::vector 确实涉及双重间接,但我相信这通常已经被优化掉了。如果您不信任编译器(这几乎总是一个可怕的举动),那么您始终可以使用与上面 v.data() 相同的技术来获取紧密循环的指针。对于 std::array,我相信包装器更薄。
仅当您是一位出色的程序员并且您确切地知道为什么要这样做,或者一位出色的程序员查看了您的问题并告诉您这样做时,您才应该使用它。如果你并不出色并且使用的是 C 风格数组,那么你犯错误的可能性很高(但不是 100%),