Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Engineered bool compares equal to both true and false, why?

Tags:

The example bellows compiles, but the output is rather strange :

#include <iostream>
#include <cstring>

struct A
{
    int a;
    char b;
    bool c;
};

int main()
{
    A v;
    std::memset( &v, 0xff, sizeof(v) );

    std::cout << std::boolalpha << ( true == v.c ) << std::endl;
    std::cout << std::boolalpha << ( false == v.c ) << std::endl;
}

the output is :

true
true

Can someone explains why?

If it matters, I am using g++ 4.3.0

like image 634
BЈовић Avatar asked Dec 23 '10 12:12

BЈовић


People also ask

Can a boolean be both true and false?

A Boolean variable has only two possible values: true or false.

Is bool automatically true or false?

bool "bar" is by default true, but it should be false, it can not be initiliazied in the constructor. is there a way to init it as false without making it static?

Is bool One True or false?

Work with Booleans as binary values The byte's low-order bit is used to represent its value. A value of 1 represents true ; a value of 0 represents false .

Is bool 0 True or false?

Boolean Variables and Data Type ( or lack thereof in C )Zero is used to represent false, and One is used to represent true. For interpretation, Zero is interpreted as false and anything non-zero is interpreted as true.


1 Answers

Found this in the C++ standard, section 3.9.1 "Fundamental types" (note the magic footnote 42):

6. Values of type bool are either true or false. 42)

42) Using a bool value in ways described by this International Standard as ‘‘undefined,’’ such as by examining the value of an uninitialized automatic variable, might cause it to behave as if it is neither true nor false.

This is not perfectly clear for me, but seems to answer the question.

like image 175
Roman L Avatar answered Oct 03 '22 23:10

Roman L