Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在公共c++;美国石油学会_C++_Api_Types - Fatal编程技术网

C++ 在公共c++;美国石油学会

C++ 在公共c++;美国石油学会,c++,api,types,C++,Api,Types,我正在写一个库,想知道在公共API中使用数据类型的最佳实践是什么 给定函数 void foo (int bar) 它需要一个指向某个内部数组/容器的索引。那应该是什么类型的?因为索引永远不能为负,所以我可以使用无符号int或size\t。或者如果提供了一些无效值,我应该坚持使用普通int和assert/throw吗 一般情况:我是否应该根据有效数据范围选择类型(例如,避免负面检查) 编辑:另一个例子,假设我的库提供了一个打印文件的函数。用户可以选择要打印的页面范围: void print (i

我正在写一个库,想知道在公共API中使用数据类型的最佳实践是什么

给定函数

void foo (int bar)
它需要一个指向某个内部数组/容器的索引。那应该是什么类型的?因为索引永远不能为负,所以我可以使用无符号int或size\t。或者如果提供了一些无效值,我应该坚持使用普通int和assert/throw吗

一般情况:我是否应该根据有效数据范围选择类型(例如,避免负面检查)

编辑:另一个例子,假设我的库提供了一个打印文件的函数。用户可以选择要打印的页面范围:

void print (int page_from, int page_to)

<> P>这里最好的建议可能是与现有的实践(即C++标准库做什么)一起进行。广义地说,这意味着至少在这里使用
无符号
类型;如果您实际上直接使用该类型作为数组/指针索引(并且您的抽象在这方面是透明的),那么可能需要调用
size\t


如果<代码> Foo是某个容器类的成员函数,那么您也可以考虑<代码> TyPulf之类的代码,比如“代码> SsiZyType < /代码>,并使用它。p> 我投票赞成使用未签名。更好的方法是使用stdint.h并使用类似uint32\u t的东西。

如果您所说的数组/容器只是一个通用的抽象应用程序独立数组,那么最合适的类型应该是
size\u t
。当然,您可以在界面中为类型提供
typedef
名称。同样,这仅适用于处理抽象数组,如在通用容器库或通用排序函数中

当您进入特定于应用程序的区域时,
size\t
不再是合适的类型。在特定于应用程序的区域中,该索引通常具有一些与数组不直接相关的特定于应用程序的语义。例如,它可以是某种类型的“员工id”,或“单元号”或“颜色索引”或其他内容。在这种情况下,您通常已经预先选择了整数类型来表示相应的数量。(选择通常与数组无关。)这正是您应该在界面中使用的类型


至于类型的有符号性/无符号性。。。我坚信,无符号量应该用无符号类型表示,即一个正常数组索引应该是无符号的。< /P> C++中没有<代码> Stdit.H./Cube >,即使有,使用固定大小的类型也是错误的。您可以拥有一个包含2**32个以上元素的数组。(谁说640kB的内存应该足够任何人使用?)我不是建议使用32位整数,你也可以使用uint64_t,我是建议你知道变量的大小。谢谢你的链接。正如我所说的,C++中没有<代码> STND.H < />代码。(C++C++标准是基于C90的,C++的下一个修订版将介绍<代码> STNDIT.H./COD>。至少有一个主要的C++编译器还不支持它——MSVC)。无论如何,我认为固定变量的大小不是一个好主意,尤其是当它们引用内存中的索引或大小时(内存的增长趋势超过所有限制)。我想我们都在64位繁荣时期学到了这一课。@Drakosha我建议您不应该关心变量的确切大小,只关心它们“足够大”。这通常意味着使用int或long,让编译器在给定的硬件上选择最有效的表示,可能会添加一些编译时断言,这些类型可以保存所需的值范围。+1:为数字应该表示的数量创建一个typedef。