В C ++ Bool гарантированно будет 0 или 1 < /p>
C++ (§4.5/4):
An rvalue of type bool can be converted to an rvalue of type int, with
false becoming zero and true becoming one.
< /code>
Рассмотрим следующую функцию и что G ++ 5.2 генерирует с -O3 < /p>
int foo(bool a, bool b)
{
if(a&b) return 3;
else return 5;
}
0000000000000000 :
0: 40 84 ff test %dil,%dil
3: 74 13 je 18
5: 40 84 f6 test %sil,%sil
8: b8 03 00 00 00 mov $0x3,%eax
d: 74 09 je 18
f: f3 c3 repz retq
11: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
18: b8 05 00 00 00 mov $0x5,%eax
1d: c3 retq
< /code>
Как видно, выше, он генерирует две инструкции по тестированию, что указывает на то, что он все еще относится к if as a (a && b) вместо кубического и. То, что два операнда A и B могут иметь только 0/1 в качестве значений, есть ли способ заставить GCC генерировать только одну тестовую инструкцию. Это действительно то, что он делает, если функция принимает два INT вместо двух слоев.
Подробнее здесь: https://stackoverflow.com/questions/332 ... oolean-and
Принуждая использовать кусочек и вместо логического и ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение