Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Lawliet1
29 / 32 / 18
Регистрация: 30.09.2011
Сообщений: 202
Завершенные тесты: 1
1

UB и логические операторы

17.02.2016, 12:32. Просмотров 626. Ответов 28
Метки нет (Все метки)

Является ли следующее выражение UB????

C++
1
ptr != 0 && *ptr++
нужно рассмотреть 2 варианта:
1) ptr - нулевой указатель
2) ptr не нулевой указатель

Насколько я понял:
1) В логическом оператора && всегда первым обрабатывается первый операнд, следовательно общее значение выражения false (второй операнд даже не рассматривался)
2) Рассматривается первый операнд - значение true, идем к второму оператору и это не UB, так как второй операнд не влияет на первый (его значение мы уже рассмотрели)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2016, 12:32
Ответы с готовыми решениями:

Определить и вывести количество дней между двумя датами (логические операторы и операторы ветвлений)
Задачка Пользователь вводит две даты (день, месяц, год в виде целых чисел)....

Записать логические выражения, используя условные операторы, операции отношений и логические операции
Записать логические выражения, используя условные операторы, операции отношений...

Операторы отношений и логические операторы
Всем добрый день. Очередной день изучения Г.Шилда С++ базовый курс, дошел до...

Операторы отношений и логические операторы
изучаю C++ по Шилдту, и частенько встречаются не рабочии коды и приходится...

Логические операторы
Верно ли уж так на все 100%, что выполнение логических операций по укороченной...

28
Croessmah
17.02.2016, 17:19     UB и логические операторы
  #21

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Представим, что класс S из моего примера это "умный" (пусть и недостаточно) указатель
умный указатель, это же не указатель :)

0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
17.02.2016, 17:19 22
Цитата Сообщение от Kastaneda Посмотреть сообщение
вот так же надо
Да-да. И можно ещё результат сравнения на истину проверить, а потом проверить результат сравнения на истину на истину ...
C++
1
if((static_cast<bool>(s) == true) == true)
1
ct0r
Игогошка!
1789 / 690 / 44
Регистрация: 19.08.2012
Сообщений: 1,340
Завершенные тесты: 1
17.02.2016, 17:38 23
Babysitter,
A zero value, null pointer value, or null member pointer value is converted to false; any other value is converted to true.
Однако я всегда пишу nullptr - сразу видно, что это указатель, а не что-то еще.
1
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
17.02.2016, 17:43 24
Цитата Сообщение от ct0r Посмотреть сообщение
я всегда пишу nullptr - сразу видно, что это указатель, а не что-то еще.
Как-то так?) if( (static_cast<bool>(ptr) == true) != nullptr )
0
ct0r
Игогошка!
1789 / 690 / 44
Регистрация: 19.08.2012
Сообщений: 1,340
Завершенные тесты: 1
17.02.2016, 17:49 25
rikimaru2013, не, вот так:
C++
1
2
3
4
if (wtf != nullptr) {
  if (wtf != nullptr) {
    // wtf != nullptr, 200%
    ...
0
Croessmah
++Ͻ
14634 / 8381 / 1584
Регистрация: 27.09.2012
Сообщений: 20,602
Записей в блоге: 2
Завершенные тесты: 1
17.02.2016, 17:50 26
Цитата Сообщение от ct0r Посмотреть сообщение
wtf != nullptr, 200%
не факт, если другой поток вклинится
0
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
17.02.2016, 17:54 27
Шутки шутками, но я видел такое:
C++
1
2
3
4
5
6
7
bool foo(some* ptr)
{
    if( ptr->getE() )
        return true;
    else
        return false;
}
Мой психиатр говорит, что я должен отпустить это и просто забыть.
0
ct0r
Игогошка!
1789 / 690 / 44
Регистрация: 19.08.2012
Сообщений: 1,340
Завершенные тесты: 1
17.02.2016, 17:55 28
Croessmah, я писал про однопоточную среду. В многопоточной я использую Ten-Thousands-Checked Locking Pattern
1
Croessmah
++Ͻ
14634 / 8381 / 1584
Регистрация: 27.09.2012
Сообщений: 20,602
Записей в блоге: 2
Завершенные тесты: 1
17.02.2016, 18:05 29
Цитата Сообщение от ct0r Посмотреть сообщение
В многопоточной я использую Ten-Thousands-Checked Locking Pattern
Это хорошо, главное, что не Double-Checked-Lock Pattern
0
17.02.2016, 18:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2016, 18:05

Логические операторы в выражениях
Здравствуйте, в одном из тестов для новичков наткнулся на вопрос: каков...

Не работают логические операторы
Выдает такую ошибку, в интернете не понял как решить, тренируюсь по пособию,...

Как оптимизируются логические операторы?
Интуиция подсказывает, что компиляторы могут оптимизировать проверку условий....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru