int n的含义!=无符号int(n)

时间:2018-11-30 11:41:31

标签: c++ file c++11 ppm

我正在读取一个代码段,该段正在检查ppm文件中的某些值是否正确。值的读取方式如下:

image >> img_format >> width >> height >> maxval;

然后检查宽度和高度是否正确:

if (width != unsigned int(width) && height != unsigned int(height))
{
    cerr << "Width and/or height of the image are missing." << endl;
    exit(EXIT_FAILURE);
}

** {widthheight被声明为unsigned int

这种情况如何起作用?

2 个答案:

答案 0 :(得分:0)

无符号整数表示数字为0或任何正数。在您的情况下,它正在检查变量width和height是否均为0或某个正整数。

侧面注意:Size_t是表示无符号整数的另一种数据类型。

答案 1 :(得分:-1)

首先unsigned int(width)是非法语法。也许对编译器进行了扩展,以允许它(我已经检查了clang和gcc,并且即使使用gnu++也都不允许)。有正确编写此演员表的方法:

(unsigned int)(width)
unsigned(width)
static_cast<unsigned int>(width)
static_cast<unsigned(width)

推荐static_cast

现在假设采用上述方式之一编写条件,则它什么也不做。您认为witdthheight的类型为unsigned int,因此强制类型转换绝对不执行任何操作,因此比较等效于:

width != width

永远都是假的。

这是一个错误。


检查流读取操作是否成功的正确方法是:

if (!(image >> img_format >> width >> height >> maxval))
    // error

或等价物:

image >> img_format >> width >> height >> maxval;

if (!image)
    // error