这是一个最佳实践问题。我正在制作一个数组
type * x = malloc(size*sizeof(type));
AFAIK sizeof给出size_t的返回值。这是否意味着我应该使用size_t来声明或传递大小?另外,当索引数组时,我还应该使用size_t作为索引变量吗?这些最佳做法是什么?这不是他们在学校教的东西,现在我正在学习我想知道的严肃的c ++。
另外,如果有人参考我可以找到这种东西的最佳实践,那会有帮助吗?程序员预订的礼仪。
编辑: malloc应该是cudaHostAlloc或cudaMalloc,因为我正在开发一个同时在设备和主机上存储数组的类,并同时更新它们。因此,malloc只是我实际要做的事情的持有者。
答案 0 :(得分:6)
通常,我使用任何最小化隐式或显式强制转换和警告错误的数量。一般来说,有很好的理由可以按照自己的方式输入内容。 size_t
是数组索引的不错选择,因为它是unsigned
,您通常不想访问myarray[-1]
,例如。
顺便说一句,因为这是C ++,你应该养成使用malloc
(free
)的习惯,这是CRT(C运行时库)的一部分。使用new
(delete
),最好使用smart pointers,以尽量减少手动内存处理。
掌握了基础知识后,良好实践参考(特定语言)为Effective C++ by Scott Meyers。合乎逻辑的下一步是Effective STL。
答案 1 :(得分:4)
参考您的后续问题:
我用于一般高级编程的最佳参考“当前的良好实践”有点像:
Code Complete by Steve McConnell (ISBN 0-7356-1967-0)
我一直在引用它。当我的公司正式编写其编码标准时,我是根据它编写的。它并没有像设计或体系结构那样多,但是为了实际敲打代码,这本书被恰当地命名。
答案 2 :(得分:2)
cudaMalloc
的大小为size_t
,因此为了保持一致性,您应该将其用于索引。
答案 3 :(得分:0)
好吧,既然你已经放弃了最佳实践,甚至是好的练习,那么使用malloc ......为什么它真的重要?
那就是说,我通常使用size_t,除非我需要一种可以对各种半稀有条件产生负面影响的类型。
答案 4 :(得分:-1)
我希望int
超过size_t
有几个原因:
size_t
这里没有size_t
在不同系统上的定义不同,可能会为某些开发人员带来惊喜int
可避免for (size_t i=9; i>=0; --i)
个错误,以及条件中的其他错误,例如if (result < 1)
或if ((i-2)/2 < 1)
size_t
是一种无用的抽象,通过消除下溢来掩盖不需要的行为