21得票6回答
将字符串转换为size_t

有没有一种方法可以将 std::string 转换为 size_t?问题在于 size_t 是平台相关类型(尽管它是由 sizeof 的结果得出的)。因此,我不能保证将 string 转换为 unsigned long 或 unsigned int 将正确完成。 编辑: 一个简单的例子是:s...

20得票3回答
类型为size_t和ptrdiff_t的变量

通过阅读与 size_t 和 ptrdiff_t 相关的帖子,我想确认以下内容: 如果数组的最大大小小于 1/2*(max number represent-able by size_t),那么我可以安全地使用 ptrdiff_t 并检查同一对象的两个指针之间的相对距离吗?(由于我在谈论数...

19得票3回答
哪个C++标准头文件定义了SIZE_MAX?

我正在处理一个现有的C++代码库,它在几个地方使用了SIZE_MAX。我进行了一些重构,现在其中一个模块中未定义SIZE_MAX。当Travis-CI尝试在Linux上构建项目时出现了问题。在我重构之前,它正常工作,但是跟踪包含哪些确切头文件很困难。 为了在本地复制该问题,我安装了一个带有默...

19得票3回答
在索引数组时,我是否应该总是使用size_t?

即使数组的大小没有超过int的大小,我是否需要始终使用size_t来索引数组? 这不是关于何时应该使用size_t的问题。我只想知道,例如,一个程序有2GB可用内存(所有这些字段都可以通过int32进行索引),但是该内存被分配到计算机RAM的14GB - 16GB的"fields"。 如果...

17得票2回答
size_t与std::size_t有什么区别?应该如何处理?

刚阅读完: Does "std::size_t" make sense in C++? 我意识到当你 #include <cstddef> 时,使用 ::size_t 不符合标准(虽然我的编译器支持)。我想遵循标准,但是我不想在所有的 size_t 前添加 ...

17得票3回答
将int类型转换为size_t类型

在C99标准下,在32位和64位Linux平台上,将int转换/强制转换为size_t的正确方式是什么? 示例:int hash(void * key) { //... } int main (int argc, char * argv[]) { size_t size =...

17得票2回答
如何检测被赋为size_t的负数?

这个声明在g++ -pedantic -Wall(版本4.6.3)中可以顺利编译,且没有警告: std::size_t foo = -42; 不太明显的错误是声明一个带有size_t参数的函数,并使用负值调用该函数。这样的函数能否保护不小心传入负参数(看起来像是遵守§4.7/2的大量五十...

17得票3回答
printf是否需要使用%zu格式说明符?

我们在一个嵌入式平台上使用C89。我试图打印出size_t,但它没有起作用: 我们在嵌入式平台上使用C89。我尝试打印一个size_t,但无法运行:#include <stdio.h> int main(void) { size_t n = 123; print...

16得票1回答
size_t的printf函数

有没有办法在不进行强制类型转换或产生编译器警告的情况下,给printf函数传递一个size_t类型的参数呢?(我总是会使用-Wall选项进行编译。)

15得票5回答
为什么数组大小可以用 int 表示,而使用 size_t 呢?

C标准保证int类型能够存储所有可能的数组大小,至少这是我从阅读§6.5.2.1,子节1(数组下标约束)中了解到的。 引用语句如下: “其中一个表达式应具有“指向对象类型”的指针类型,另一个表达式应具有整数类型,并且结果具有“类型”类型。” 由于我们将使用int作为数组下标,那么为...