c++ 这段代码是做什么的?(size_t)-1

z6psavjg  于 2023-03-25  发布在  其他
关注(0)|答案(4)|浏览(219)

有人能解释一下当size_t或任何其他类型标识符被括在括号中时会发生什么吗?我知道这是旧的类型转换语法,但在本文中我不明白发生了什么。
我已经看到它定义类型的最大大小为:

size_t max_size = (size_t)-1
bqujaahr

bqujaahr1#

这段代码(不必要地)将-1转换为size_t。最可能的意图是在这个系统上获得size_t的最大可能值。
虽然这段代码没有Undefined Behavior,但这段代码很难看--在C++中,你应该使用std::numeric_limits<size_t>::max(),而在C中,你应该使用SIZE_MAX宏来获得最大的size_t值。

z9zf31ra

z9zf31ra2#

(size_t)-1实际上相当于size_t(-1)
另见以下问题c cast syntax styles

jxct1oxe

jxct1oxe3#

一些库方法故意返回(size_t)(-1)来指示错误条件。例如,the iconv method from the GNU libiconv library。我假设这些函数不返回ssize_t(有符号)返回值有一些很好的原因,这将允许您直接检查-1。

t9aqgxwy

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--;
}

相关问题