Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
gGrn-7DA
мну довольно <(-__-)l
203 / 192 / 1
Регистрация: 17.01.2010
Сообщений: 2,392
Завершенные тесты: 1
#1

Странное поведение bool - C++

13.02.2012, 20:48. Просмотров 1562. Ответов 23
Метки нет (Все метки)

Помогал отлаживать код и мы наткнулись на удивительное.

Кодер скрыл отображение варнингов в VS2010.
Метод М1 не всегда возвращал значение типа bool.
И потому в методе М2, вызывающем метод М1, случилась такая ситуация, что:
C++
1
M1()!=true & M1()!=false
Это нормальное поведение компилятора?
Логика то понятна, но почему это вообще варнинг, а не еррор как в си шарпе?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2012, 20:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странное поведение bool (C++):

Странное поведение указателя - C++
class XMLDocument { public: char *xml; XMLDocument() { }; void NewXML()

потокобезопасный bool (?) - C++
Является ли работа с обыкновенным bool потокобезопасной? Если нет, то можно пример, где что-то пойдет не так при работе с переменной типа...

конвертация строки TCHAR в BOOL ? - C++
Получаю параметр в виде строки &quot;TRUE&quot;\&quot;FALSE&quot; из ini, но ни как не получается его преобразовать в нормальный для переменной чекбокса вид....

Decltype поведение - C++
Добрый день :) вообщем вот такой вопрос читаю книгу и там есть такой пример int a = 10; decltype((a)) b;//тут мы получим ссылку потому...

"std::domain_error" в bool-функции - C++
Есть одна функция, которая сохраняет данные json в файл. Когда доходит дело до return, то срабатывает исключение &quot;std::domain_error&quot;. ...

Можно ли полагаться на поведение this->shared_from_this() - C++
добрый вечер. #include &lt;iostream&gt; #include &lt;memory&gt; struct sample: std::enable_shared_from_this&lt;sample&gt; ...

23
Evg
Эксперт CАвтор FAQ
18032 / 6264 / 427
Регистрация: 30.03.2009
Сообщений: 17,218
Записей в блоге: 27
13.02.2012, 22:20 #16
Sun'овский компилятор (к которому на моей памяти ещё не было ни одной претензии по части поддержки стандарта) действительно запрещает это дело, а вариант, когда по одной ветке есть return, а по другой нету - нормально компилируется
0
retmas
Жарю без масла
863 / 745 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
13.02.2012, 22:23 #17
Цитата Сообщение от Evg Посмотреть сообщение
Sun'овский компилятор (к которому на моей памяти ещё не было ни одной претензии по части поддержки стандарта) действительно запрещает это дело, а вариант, когда по одной ветке есть return, а по другой нету - нормально компилируется
как ни странно vs2010 имеет такое же поведение
0
Evg
Эксперт CАвтор FAQ
18032 / 6264 / 427
Регистрация: 30.03.2009
Сообщений: 17,218
Записей в блоге: 27
13.02.2012, 22:30 #18
Цитата Сообщение от retmas Посмотреть сообщение
как ни странно vs2010 имеет такое же поведение
Я им не пользуюсь. У меня из виндузовых есть только borland
0
retmas
Жарю без масла
863 / 745 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
13.02.2012, 22:51 #19
самое интересное, что согласно
Flowing off the end of a function is equivalent to a return with no value
C++
1
2
3
4
int f()
{
   // noreturn - ошибка
}
и
C++
1
2
3
4
int f()
{
   return;
}
одно и то же.
но в первом случае g++ выдает ворнинг, а во 2-м - ошибку. похоже это не просто не стандартное поведение(aka расширение), а баг. может стоит репортнуть(если не репортилось это ранее)?

Добавлено через 15 минут
gcc жрет оба варианта
0
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
13.02.2012, 22:57 #20
retmas, свежий gcc(и g++) для целых ноль возвращает по умолчанию(для всех, не только main), причём некоторое время назад он так не делал, таки расширение
0
retmas
Жарю без масла
863 / 745 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
13.02.2012, 23:20 #21
у меня 4.6.2 - не такой уж и древний.
для С++ в стандарте явно сказано, что должно быть. нет там никаких умолчаний. умолчания были "во времена Очакова и покорения Крыма".
либо ретурн что-то явно(для возвращающих значение ф-ий), либо(в отсутствие ретурна) интерпретируется как ретурн воид
поправьте, если не прав

Добавлено через 11 минут
хотя, соглашусь. нет тут бага. вроде разобрался почему g++ жрет такое
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,389
14.02.2012, 09:30 #22
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
да, логично. Но почему оно != true и != false
Потому, что оно неинициализированное.
0
gGrn-7DA
14.02.2012, 19:02  [ТС]
  #23

Не по теме:

CheshireCat, да, уже разобрались.

0
Kastaneda
14.02.2012, 19:48     Странное поведение bool
  #24

Не по теме:

C++
1
M1()!=true & M1()!=false
если бы M1() возвращала значение, то можно было бы подумать, что это проверка на NAN. Я сразу так и подумал, пока дальше тему не почитал.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 19:48
Привет! Вот еще темы с ответами:

Странное поведение! - C++ Builder
Доброго времени суток! На лицо странное (на мой взгляд) поведение С++ Builder 6. Итак код: String TBlockScheme::FigureCode(TPoint...

Странное поведение UnicodeString. - C++ Builder
С некоторого момента UnicodeString без особых на то причин начала вести себя странно. Variang vstr = &quot;debug_1&quot;; UnicodeString ustr; ...

Странное поведение XE2 - C++ Builder
Как такое возможно(скриншот). И еще замечаю - не всегда происходит присваивание значений переменным.

Странное поведение - Java SE
Добрый день! Имеется класс с мейном: public class Main { // args - is path to file with first and last words // args -...


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

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

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