Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. У меня есть вопрос по следующему простому коду: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. Мне не понятна проверка в функции Punct_stream::operator bool() : Код: plaintext 1. 1. Для чего автор проверяет fail и bad ? Почему он не ограничился лишь проверкой good ? Разве положительный good автоматически не подразумевает, что fail и bad установлены в false ? 2. Кроме того, часто в коде пишут такую конструкцию: Код: plaintext 1. 2. 3. Почему в функции Punct_stream::operator bool() автор не написал по аналогии так: Код: plaintext 1. 2. 3. 4. 5. 6. Показанный мною альтернативный вариант у меня не работает (кладёт на лопатки Windows), хотелось бы понять, почему, что я упустил? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 11:44 |
|
||
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
Compositum, return !(source.fail() || source.bad()) && source.good() -- оптимизация под fail и bad (likely/unlikely), видимо это состояние частое. ios::good еще проверяет eof. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 12:32 |
|
||
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
sherzod_, Спасибо. А почему второй вариант не работает так, как я ожидал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 12:42 |
|
||
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
Compositum, не знаю:). Винду можно по разному на лопатки класть :D. Возможно из-за eof, стандартный оператор приведения к void* или bool не проверяет этот флаг, а возвращает !fail(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 12:59 |
|
||
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
Хм... Сейчас снова попробовал свой вариант проверки - отработал нормально. В прошлый раз, когда пришлось перегружать Windows (ибо всё насмерть зависло), я в качестве исходных данных программе скормил произвольный текст с какой-то web-странички, с сайта http://www.cplusplus.com... И всё же интересно, зачем Беарне Стровструп так "завернул" проверку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 14:02 |
|
||
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
CompositumИ всё же интересно, зачем Беарне Стровструп так "завернул" проверку... 14290140 это же ваша тема, по моему. Anatoly Moskovsky вроде там всё разъяснял доходчиво ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 14:46 |
|
||
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
egorychCompositumИ всё же интересно, зачем Беарне Стровструп так "завернул" проверку... 14290140 это же ваша тема, по моему. Anatoly Moskovsky вроде там всё разъяснял доходчиво я в курсе о преобразованиях и не спрашивал о них. мой вопрос о другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 14:53 |
|
||
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
Compositumпришлось перегружать Windows (ибо всё насмерть зависло), Вероятно у вас в коде где-то возник бесконечный цикл с выделением памяти внутри него. Или просто очень много памяти выделяется. Других причин, чтобы винда повисла нет. Это вам не ДОС какой-то. Но в любом случае причина не в операторе, т.к. он тривиален и там никаких ошибок не видно. Ищите проблему в другом месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:17 |
|
||
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
CompositumПочему в функции Punct_stream::operator bool() автор не написал по аналогии так: Вообще-то по аналогии (если рассматривать стандарт) то оператор должен выглядеть так Код: plaintext 1. 2. 3. 4. Ну а fail() реализовать через делегирование во вложенный объект. fail() включает в себя bad() поэтому нет смысла отдельно вызывать bad(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:27 |
|
||
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyесли рассматривать стандарт Речь про стандарт C++03. В C++11 внесены изменения. Какие - не помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:32 |
|
||
|
Проверка потока
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВообще-то по аналогии (если рассматривать стандарт) то оператор должен выглядеть так Код: plaintext 1. 2. 3. 4. Ну а fail() реализовать через делегирование во вложенный объект. fail() включает в себя bad() поэтому нет смысла отдельно вызывать bad(). Почему пишете про void*? Это же оператор неявного преобразования в bool (я о варианте Стровструпа)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:44 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38294125&tid=2020150]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 290ms |
| total: | 426ms |

| 0 / 0 |
