Принуждая использовать кусочек и вместо логического иC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Принуждая использовать кусочек и вместо логического и

Сообщение Anonymous »

В 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»