void* p=false;
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 21.04.17 09:20
Оценка: :)
%SUBJ% откомпилировался без проблем [VS2017].

С моей измученной нарзаном точки зрения, это неправильно.

Неявное приведение указателя к bool — это, в принципе, нормально.

А вот обратно — это явно ненормально.

Что думаете по этому поводу?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Отредактировано 21.04.2017 9:47 DDDX . Предыдущая версия .
Re: void* p=false;
От: SergeyOsipov Россия  
Дата: 21.04.17 09:25
Оценка: +1 :))) :)
Здравствуйте, Коваленко Дмитрий, Вы писали:

То, что C++ позволяет выстрелить себе в ногу, но это не минус, а плюс. Даже два плюса
Re: void* p=false;
От: rg45 СССР  
Дата: 21.04.17 09:29
Оценка: +1
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>%SUBJ% откомпилировался без проблем [VS2017].

КД>С моей измученной нарзаном точки зрения, это не правильно.
КД>Неявное приведение указателя к bool — это, в принципе, нормально.
КД>А вот обратно — это явно ненормально.
КД>Что думаете по этому поводу?

Старые компиляторы обрабатывают 'false' по тем же правилам, что и литеральный ноль. Простая замена 'false' на 'true' приводит к ошибке компиляции. В новых же компиляторах уже и 'false' обрабатывается по специальным, более строгим, правилам.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 21.04.2017 9:29 rg45 . Предыдущая версия .
Re[2]: void* p=false;
От: uzhas Ниоткуда  
Дата: 21.04.17 16:08
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>>%SUBJ% откомпилировался без проблем [VS2017].

КД>>С моей измученной нарзаном точки зрения, это не правильно.
КД>>Неявное приведение указателя к bool — это, в принципе, нормально.
КД>>А вот обратно — это явно ненормально.
КД>>Что думаете по этому поводу?

R>Старые компиляторы обрабатывают 'false' по тем же правилам, что и литеральный ноль. Простая замена 'false' на 'true' приводит к ошибке компиляции. В новых же компиляторах уже и 'false' обрабатывается по специальным, более строгим, правилам.



Ты относишь VS2017 к старым или новым компиляторам?
Re[3]: void* p=false;
От: rg45 СССР  
Дата: 21.04.17 16:35
Оценка:
Здравствуйте, uzhas, Вы писали:

R>>Старые компиляторы обрабатывают 'false' по тем же правилам, что и литеральный ноль. Простая замена 'false' на 'true' приводит к ошибке компиляции. В новых же компиляторах уже и 'false' обрабатывается по специальным, более строгим, правилам.


U>Ты относишь VS2017 к старым или новым компиляторам?


Мда, вопрос риторический, конечно... Сейчас копался в стандарте, пытаясь понять, как оно должно быть, запутался вконец.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[4]: void* p=false;
От: uzhas Ниоткуда  
Дата: 21.04.17 18:41
Оценка: 25 (2)
Здравствуйте, rg45, Вы писали:

R>Мда, вопрос риторический, конечно... Сейчас копался в стандарте, пытаясь понять, как оно должно быть, запутался вконец.


как минимум, вот так: http://ideone.com/5zMIDP
а формальные аспекты недавно пережевывали тут
Автор: uzhas
Дата: 01.12.16
Re: void* p=false;
От: Erop Россия  
Дата: 21.04.17 18:43
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Что думаете по этому поводу?


Что в С++11 и раньше, следом за С, любой целый compile time 0 приводится по умолчанию к любому нулевому указателю.
Например:
void* p = sizeof(p) - szieof(void*);
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Отредактировано 21.04.2017 20:41 Erop . Предыдущая версия .
Re[2]: void* p=false;
От: Erop Россия  
Дата: 21.04.17 18:44
Оценка:
Здравствуйте, rg45, Вы писали:

R>Старые компиляторы обрабатывают 'false' по тем же правилам, что и литеральный ноль. Простая замена 'false' на 'true' приводит к ошибке компиляции. В новых же компиляторах уже и 'false' обрабатывается по специальным, более строгим, правилам.


Вроде как любой CT-ноль можно неявно привести к нулевому указателю любого типа жеж?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: void* p=false;
От: uzhas Ниоткуда  
Дата: 21.04.17 19:20
Оценка: 5 (1)
Здравствуйте, Erop, Вы писали:

E>Вроде как любой CT-ноль можно неявно привести к нулевому указателю любого типа жеж?


для деталей ищи в ветке "формальные аспекты"
Re[3]: void* p=false;
От: rg45 СССР  
Дата: 21.04.17 19:58
Оценка: 5 (1)
Здравствуйте, Erop, Вы писали:

E>Вроде как любой CT-ноль можно неявно привести к нулевому указателю любого типа жеж?


Например, gcc придерживается другого мнения: http://ideone.com/x7bxTu
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[4]: void* p=false;
От: Erop Россия  
Дата: 21.04.17 20:02
Оценка:
Здравствуйте, uzhas, Вы писали:

U>для деталей ищи в ветке "формальные аспекты"


Типа в С++14 решили на совместимость с С забить?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: void* p=false;
От: Erop Россия  
Дата: 21.04.17 20:04
Оценка:
Здравствуйте, rg45, Вы писали:

R>Например, gcc придерживается другого мнения: http://ideone.com/x7bxTu


А если чистый С взять?
Типа С++14 поддержали?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: void* p=false;
От: rg45 СССР  
Дата: 21.04.17 20:08
Оценка:
Здравствуйте, Erop, Вы писали:

E>А если чистый С взять?

E>Типа С++14 поддержали?

А в "чистом" C нет "false" и "true"
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[6]: void* p=false;
От: Erop Россия  
Дата: 21.04.17 20:40
Оценка:
Здравствуйте, rg45, Вы писали:

R>А в "чистом" C нет "false" и "true"


Ну до С++14 любой CT-ноль кастился к нулевому указателю в обоих языках.
например, такой: 1!=2
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: void* p=false;
От: rg45 СССР  
Дата: 21.04.17 20:48
Оценка:
Здравствуйте, Erop, Вы писали:

E>Ну до С++14 любой CT-ноль кастился к нулевому указателю в обоих языках.

E>например, такой: 1!=2

Все верно. Но почему ты придаешь этому такое значение? Почему так важно сохранить эту совместимость?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[8]: void* p=false;
От: Erop Россия  
Дата: 22.04.17 11:05
Оценка:
Здравствуйте, rg45, Вы писали:

R>Все верно. Но почему ты придаешь этому такое значение? Почему так важно сохранить эту совместимость?


У мну есть хедеры, разделяемые между языками, и в количестве
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: void* p=false;
От: Vain Россия google.ru
Дата: 22.04.17 11:06
Оценка:
Здравствуйте, rg45, Вы писали:

U>>Ты относишь VS2017 к старым или новым компиляторам?

R>Мда, вопрос риторический, конечно... Сейчас копался в стандарте, пытаясь понять, как оно должно быть, запутался вконец.
Ну, наконец-то.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[9]: void* p=false;
От: rg45 СССР  
Дата: 22.04.17 11:57
Оценка:
Здравствуйте, Erop, Вы писали:

R>>Все верно. Но почему ты придаешь этому такое значение? Почему так важно сохранить эту совместимость?


E>У мну есть хедеры, разделяемые между языками, и в количестве


И в этих хедерах массово используется инициализация указателей произвольными компайл-тайм выражениями, которые проблематично заменить на литеральный ноль? Можешь привести пару примеров?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[10]: void* p=false;
От: Erop Россия  
Дата: 22.04.17 20:03
Оценка:
Здравствуйте, rg45, Вы писали:

R>И в этих хедерах массово используется инициализация указателей произвольными компайл-тайм выражениями, которые проблематично заменить на литеральный ноль?


Я используется или нет. Компилятор, которым я это жую, С++14 в такой степени ещё не поддерживает
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.