有人能解释一下当size_t或任何其他类型标识符被括在括号中时会发生什么吗?我知道这是旧的类型转换语法,但在本文中我不明白发生了什么。我已经看到它定义类型的最大大小为:
size_t max_size = (size_t)-1
bqujaahr1#
这段代码(不必要地)将-1转换为size_t。最可能的意图是在这个系统上获得size_t的最大可能值。虽然这段代码没有Undefined Behavior,但这段代码很难看--在C++中,你应该使用std::numeric_limits<size_t>::max(),而在C中,你应该使用SIZE_MAX宏来获得最大的size_t值。
-1
size_t
std::numeric_limits<size_t>::max()
SIZE_MAX
z9zf31ra2#
(size_t)-1实际上相当于size_t(-1)另见以下问题c cast syntax styles
(size_t)-1
size_t(-1)
jxct1oxe3#
一些库方法故意返回(size_t)(-1)来指示错误条件。例如,the iconv method from the GNU libiconv library。我假设这些函数不返回ssize_t(有符号)返回值有一些很好的原因,这将允许您直接检查-1。
(size_t)(-1)
ssize_t
t9aqgxwy4#
在我看到的代码中,它只是想得到-1。
while (len != (size_t)-1) // when len becomes -1, it will terminate. { mod = num % 16; if (mod < 10) str[len] = mod + '0'; else if (mod >= 10) str[len] = (mod - 10) + 'a'; num = num / 16; len--; }
4条答案
按热度按时间bqujaahr1#
这段代码(不必要地)将
-1
转换为size_t
。最可能的意图是在这个系统上获得size_t
的最大可能值。虽然这段代码没有Undefined Behavior,但这段代码很难看--在C++中,你应该使用
std::numeric_limits<size_t>::max()
,而在C中,你应该使用SIZE_MAX
宏来获得最大的size_t
值。z9zf31ra2#
(size_t)-1
实际上相当于size_t(-1)
另见以下问题c cast syntax styles
jxct1oxe3#
一些库方法故意返回
(size_t)(-1)
来指示错误条件。例如,the iconv method from the GNU libiconv library。我假设这些函数不返回ssize_t
(有符号)返回值有一些很好的原因,这将允许您直接检查-1。t9aqgxwy4#
在我看到的代码中,它只是想得到-1。