size-t相关内容

何时使用 std::size_t?

我只是想知道我应该使用 std::size_t 代替 int 来代替循环和其他东西吗?例如: #include int main(){for (std::size_t i = 0; i 一般来说,关于何时使用 std::size_t 的最佳实践是什么? 解决方案 一个好的经验法则是,对于任何你需要在循环条件中与自然是 std::size_t 本身. std::size_t 是任 ..
发布时间:2021-12-25 13:03:44 C/C++开发

为什么数组的最大大小“太大"?

我和这个答案的印象相同,总是保证size_t按照标准,足够大以容纳给定系统的最大可能类型. 但是,此代码无法在 gcc/Mingw 上编译: #include #include typedef uint8_t array_t [SIZE_MAX]; 错误:数组'array_t'的大小太大 我是否误解了此处的标准?对于给定的实现,size_t 是否允许太大?或者这是 Mingw 的另 ..
发布时间:2021-12-18 23:02:13 其他开发

size_t 与 uintptr_t

C 标准保证 size_t 是一种可以保存任何数组索引的类型.这意味着,从逻辑上讲,size_t 应该能够保存任何指针类型.我在 Google 上发现的一些网站上读到,这是合法的和/或应该始终有效: void *v = malloc(10);size_t s = (size_t) v; 然后在 C99 中,标准引入了 intptr_t 和 uintptr_t 类型,它们是保证能够保存指针的有符 ..
发布时间:2021-12-13 12:47:19 其他开发

C 中的 size_t 是什么?

我对 C 中的 size_t 感到困惑.我知道它是由 sizeof 运算符返回的.但究竟是什么呢?是数据类型吗? 假设我有一个 for 循环: for(i = 0; i 我应该使用 int i; 还是 size_t i;? 解决方案 来自维基百科: 根据 1999 ISO C 标准(C99), size_t 是一个无符号整数至少 16 位的类型(参见章节7.17 和 7. ..
发布时间:2021-12-02 00:02:14 其他开发

unsigned int 与 size_t

我注意到现代 C 和 C++ 代码似乎在几乎所有地方都使用 size_t 而不是 int/unsigned int - 从 C 的参数字符串函数到 STL.我很好奇这样做的原因及其带来的好处. 解决方案 size_t 类型是无符号整数类型,它是 sizeof 运算符(和offsetof 运算符),因此它保证足够大以包含系统可以处理的最大对象的大小(例如,8Gb 的静态数组). siz ..
发布时间:2021-12-01 15:38:09 C/C++开发

32 位与各种 64 位数据模型的 sizeof(size_t) 是多少?

在 64 位系统上,sizeof(unsigned long) 取决于系统实现的数据模型,例如在 LLP64 (Windows) 上为 4 个字节,在 LP64 上为 8 个字节(Linux 等).sizeof(size_t) 应该是什么?它是否会像 sizeof(long) 那样随数据模型而变化?如果是,怎么办? 参考文献: 维基百科上的 64 位数据模型 解决方案 size ..
发布时间:2021-11-25 05:07:21 C#

printf 是否需要 %zu 说明符?

我们在嵌入式平台上使用 C89.我试图打印出一个 size_t,但没有成功: #include int main(void) {size_t n = 123;printf("%zu\n",n);返回0;} 我得到了 zu 而不是 123. 其他说明符正常工作. 如果 size_t 存在,zu 是否也应该在 printf 中可用? 这是我应该联系我的库供应商的事情,还是允许库实现排除它 ..
发布时间:2021-06-21 18:59:00 其他开发

索引数组时我应该总是使用 size_t 吗?

我是否需要在索引数组时始终使用 size_t,即使数组不够大而无法超过 int 的大小? 这不是我应该何时使用 size_t 的问题.我只想知道,例如,一个程序是否有 2GB 的可用内存(所有这些字段都可以由 int32 索引),但是这个内存(虚拟内存)分配给了计算机的 14GB - 16GB 的“字段"内存. 如果我在此使用 int32 而不是 size_t(或 unsigned l ..
发布时间:2021-06-18 19:55:56 C/C++开发

使用 MPI 发送 size_t 类型的数据

在 MPI 中发送 size_t 类型数字的最安全方法是什么?例如,我确信将其作为 MPI_INT 盲目发送是不安全的.MPI_LONG 会一直工作吗? 解决方案 如何使用宏? #include #include #if SIZE_MAX == UCHAR_MAX#define my_MPI_SIZE_T MPI_UNSIGNED_CHAR#elif SIZE_MAX == USHRT_ ..
发布时间:2021-06-04 18:34:50 其他开发

size_t是否足够大以表示任何类型的大小?

size_t 是否保证足以代表任何类型的大小?根据此参考: size_t 可以存储理论上可能的对象的最大大小任何类型的(包括数组). 通常这是一个可靠的参考,但是我在标准的相关部分中找不到任何证明或争议的证据. 解决方案 是.根据 C99,在stddef.h中定义了size_t标准(位于sizeof运算符(6.5.3.4)的部分)中: 结果的值是实现定义的,其类型(无符号 ..
发布时间:2021-05-28 20:19:02 其他开发

在倒数计数循环中使用size_t时的无限循环

所以我在任何索引for循环中都使用 size_t 而不是 int 来防止出现负索引.但是,当递减计数时,会导致溢出: for(size_t i = 10; i> = 0; --i){//做某事,例如array [i] = i} 预防这种情况的一种好方法是什么? 改为使用 int ? 使用i == 0作为终止条件吗?(但是,如果我需要0,这将不起作用) 感谢您的反馈! 解 ..
发布时间:2021-05-15 21:10:29 其他开发

对于循环退出条件(size_t与int)

当我在程序中添加以下内容时: 用于(size_t i = VectorOfStructs.size()-1; i> 0; i--) 它可以正常工作,但"i"永远不会等于0.因此,我无法访问第一个元素(VectorOfStructs [0]). 如果我将其更改为: 用于(size_t i = VectorOfStructs.size()-1; i> -1; i--) 程序甚至没有进 ..
发布时间:2021-05-09 18:40:59 C/C++开发

在C ++代码中将size_t变量与-1(最大大小值)进行比较

我正在重构一个库,并试图摆脱许多gcc警告.这些警告的大部分与有符号/无符号比较有关,并且与 size_t 的用法有关.该库可在64位Linux系统上使用. 程序员使用-1作为特殊值,类似于 std :: string :: npos .库中很多地方的代码如下所示: class AnnotationBase{上市:size_t m_offset = -1;size_t m_length ..
发布时间:2021-04-23 19:53:11 C/C++开发

C:将int转换为size_t

在32位和64位linux平台上,在C99中将 int 转换/转换为 size_t 的正确方法是什么? 示例: int hash(void * key){//...}int main(int argc,char * argv []){size_t size = 10;无效*项目[大小];//...无效*键= ...;//这是从哈希函数转换返回的int的正确方法//为size_t?size ..
发布时间:2021-04-21 18:31:20 其他开发

sizeof(size_t)可以小于sizeof(int)吗?

sizeof(size_t)是否可以小于 sizeof(int)? C和/或C ++标准是否保证使用 unsigned int 进行数组索引总是安全的? 解决方案 是的, sizeof(size_t)原则上可以小于 sizeof(int).我不知道有什么实现是正确的,而且很可能没有实现.我可以想象使用64位 int 和32位 size_t 的实现. 但是使用 unsigned ..
发布时间:2021-04-19 20:03:29 C/C++开发

C ++-您应该使用常规数组使用size_t吗?

我对 size_t 感到困惑.我知道这是一个未签名的类型..对吗?我的问题是,什么时候应该使用它.是否有理由将其与常规数组一起使用?我的意思是必须声明数组的大小非常大,以至于常规的未签名或已签名的数组都无法处理.然后 size_t 就能处理好吗?有人可以给我一个例子吗? 解决方案 根据 ISO IEC 14882:2011(E) §18.2 6类型size_t是实现定义的无符号整数类 ..
发布时间:2021-04-09 20:21:36 C/C++开发