gpt4 book ai didi

visual-studio - 什么时候是 bool 不是 bool(编译器警告 C4800)

转载 作者:行者123 更新时间:2023-12-04 05:41:33 24 4
gpt4 key购买 nike

考虑这是在 MS Visual Studio 2005(可能还有其他)中编译的:

CPoint point1( 1, 2 );
CPoint point2( 3, 4 );
const bool point1And2Identical( point1 == point2 ); // C4800 warning
const bool point1And2TheSame( ( point1 == point2 ) == TRUE ); // no warning

什么……? MSVC 编译器脑死了吗?据我所知,TRUE #defined 为 1,没有任何类型信息。那么这两条线之间有什么区别呢?括号内表达式的类型肯定在两种情况下都相同吗? [这部分问题现在在下面的评论中得到了令人满意的回答]

就我个人而言,我认为通过使用 == TRUE 选项来避免警告是丑陋的(虽然比 != 0 替代品更丑,但更严格正确),最好使用 #pragma warning( disable:4800 ) 来暗示“我的代码很好,编译器很烂”。同意吗?

注意 - 我已经看到关于 C4800 的各种讨论,谈论将整数分配给 bool 值,或者将带有大薯条(握住洋葱)的汉堡组合转换为 bool 值,并想知道为什么会出现奇怪的结果。对于看似简单得多的问题,我找不到明确的答案……总的来说,这可能只是 C4800 上的亮点。

最佳答案

Have a look at this

Typically, this message is caused by assigning int variables to bool variables


TRUEBOOL是整数,而不是 bool 值。

您还可以检查是否 (point1 == point2) != 0或使用 !!(point1 == point2)
编辑

这 !!操作只是将结果转换为 bool 值,并且由于它是双重否定,您将收到相同的结果。

here之前都讨论过这个问题和 here .

关于visual-studio - 什么时候是 bool 不是 bool(编译器警告 C4800),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11218529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com