首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >int n != unsigned int(n)的含义

int n != unsigned int(n)的含义
EN

Stack Overflow用户
提问于 2018-11-30 19:41:31
回答 2查看 565关注 0票数 3

我正在读一段代码,它检查ppm文件中的一些值是否正确。这些值是这样读取的:

代码语言:javascript
复制
image >> img_format >> width >> height >> maxval;

然后,为了检查宽度和高度是否正确,使用以下命令:

代码语言:javascript
复制
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

这种情况是如何工作的?

EN

Stack Overflow用户

发布于 2018-11-30 21:47:44

首先,unsigned int(width)是非法语法。也许有一个编译器的扩展允许它(我已经检查了clang和gcc,都不允许它,即使用gnu++也不允许)。有几种方法可以正确地写出这个造型:

代码语言:javascript
复制
(unsigned int)(width)
unsigned(width)
static_cast<unsigned int>(width)
static_cast<unsigned(width)

建议使用static_cast

现在,假设使用上面的一种方式来编写您的条件,它不会做任何事情。witdthheight都是unsigned int类型,所以强制转换绝对不做任何事情,因此比较结果等同于:

代码语言:javascript
复制
width != width

这将永远是假的。

所以它是一个bug。

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

代码语言:javascript
复制
if (!(image >> img_format >> width >> height >> maxval))
    // error

或等效的:

代码语言:javascript
复制
image >> img_format >> width >> height >> maxval;

if (!image)
    // error
票数 -1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53556856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档