Если я получу переменную bool
и установлю ее второй бит на 1, тогда переменная будет иметь значение true и false одновременно. Скомпилируйте следующий код с gcc6.3 с параметром -g
(gcc-v6.3.0/Linux/RHEL6.0-2016-x86_64/bin/g++ -g main.cpp -o mytest_d
) и запустите исполняемый файл. Вы получаете следующее.
Как T может быть равным true и false одновременно?
value bits
----- ----
T: 1 0001
after bit change
T: 3 0011
T is true
T is false
Это может произойти, когда вы вызываете функцию на другом языке (скажем, на языке Fortran), где определение true и false отличается от C++. Для fortran, если какие-либо биты не равны 0, тогда значение равно true, если все биты равны нулю, тогда значение равно false.
#include <iostream>
#include <bitset>
using namespace std;
void set_bits_to_1(void* val){
char *x = static_cast<char *>(val);
for (int i = 0; i<2; i++ ){
*x |= (1UL << i);
}
}
int main(int argc,char *argv[])
{
bool T = 3;
cout <<" value bits " <<endl;
cout <<" ----- ---- " <<endl;
cout <<" T: "<< T <<" "<< bitset<4>(T)<<endl;
set_bits_to_1(&T);
bitset<4> bit_T = bitset<4>(T);
cout <<"after bit change"<<endl;
cout <<" T: "<< T <<" "<< bit_T<<endl;
if (T ){
cout <<"T is true" <<endl;
}
if ( T == false){
cout <<"T is false" <<endl;
}
}
/////////////////////////////////////Функция Фортрана, которая не совместима с C++ при компиляции с ifort.
logical*1 function return_true()
implicit none
return_true = 1;
end function return_true