C++核心准则?:标准库array或vector好于C数组
文章插图
SL.con.1: Prefer using STL array or vector instead of a C arraySL.con.1:标准库array或vector好于C数组Reason(原因)
C arrays are less safe, and have no advantages over array and vector. For a fixed-length array, use std::array, which does not degenerate to a pointer when passed to a function and does know its size. Also, like a built-in array, a stack-allocated std::array keeps its elements on the stack. For a variable-length array, use std::vector, which additionally can change its size and handles memory allocation.
C数组不够安全 , 和array或者vector相比没有任何优势 。 对于固定长度数组来讲 , 使用std::array , 当被传递给某个函数时 , 它不会退化成指针无法获得长度 。 同时和内置的数组一样 , 堆栈上分配的std::array将元素保存在堆栈上 。 对于可变长度数组 , 使用std::vector , 它可以进一步提供变更长度和惯例内存分配的功能 。
Example(示例)
int v[SIZE];// BADstd::array
Example(示例)
int* v = new int[initial_size];// BAD, owning raw pointerdelete[] v;// BAD, manual deletestd::vector
Note(注意)
Use gsl::span for non-owning references into a container.
对于不包含所有权的容器参照 , 使用gsl::span
Note(注意)
【C++核心准则?:标准库array或vector好于C数组】Comparing the performance of a fixed-sized array allocated on the stack against a vector with its elements on the free store is bogus. You could just as well compare a std::array on the stack against the result of a malloc() accessed through a pointer. For most code, even the difference between stack allocation and free-store allocation doesn't matter, but the convenience and safety of vector does. People working with code for which that difference matters are quite capable of choosing between array and vector.
在分配于堆栈上固定长度数组和将元素分配于自由存储上的vector之间进行性能比较是没有意义的 。 比较指针访问堆栈上分配的std::array和malloc的结果倒是有些意义 。 对于大多数代码 , 堆栈分配和自由存储分配的(性能 , 译者注)区别没什么影响 , 然而vector却可以提供便利性和安全性 。 如果有些代码确实对这种区别敏感 , 人们完全可以在array和vector之间进行选择 。
Enforcement(实施建议)
- Flag declaration of a C array inside a function or class that also declares an STL container (to avoid excessive noisy warnings on legacy non-STL code). To fix: At least change the C array to a std::array.标记同时在函数或类内部同时使用C数组和STL容器的情况(为了避免对既存的非STL代码过度报警) 。 修改方法:至少将C风格数组替换为std::array 。
#slcon1-prefer-using-stl-array-or-vector-instead-of-a-c-array
新书介绍
《实战Python设计模式》是作者最近出版的新书 , 拜托多多关注!
文章插图
本书利用Python 的标准GUI 工具包tkinter , 通过可执行的示例对23 个设计模式逐个进行说明 。 这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明 , 让读者明白在编写代码时如何判断使用设计模式的利弊 , 并合理运用设计模式 。
- 内存大厂跨界之作!芝奇Enki 360一体式水冷评测:高密度冷排稳压18核心
- Intel DG2游戏独立显卡偷跑:仅仅4096个核心
- 高下立现!关于核心技术的态度,柳传志和任正非截然不同
- AMD Zen 3锐龙5000系列APU核心结构图曝光 较上一代更加强大
- 苹果自研新处理器曝光:64核心
- 全国劳模郜春海:核心技术买不来,只有自主创新才能不再受制于人
- 做核心技术是找死?任正非早已预料,而联想柳传志却始料未及
- 恐怖 苹果或许正在设计64核心ARM芯片
- 为什么我喜欢C语言,却非常讨厌C++?一位国外程序员的回答
- AMD Zen3线程撕裂者曝料:16核心回归、名字凌乱