|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
||||||
Почему std::cout выводит только 1 символ?23.12.2019, 12:00. Показов 4486. Ответов 27
Метки нет (Все метки)
Привет
![]() Почему выводит только 1 символ?
0
|
||||||
| 23.12.2019, 12:00 | |
|
Ответы с готовыми решениями:
27
Почему gcc ругается на std::cout? |
|
Вездепух
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
|
||
| 23.12.2019, 12:05 | ||
Сообщение было отмечено hoggy как решение
Решениеconst char *. Ваш указатель типа volatile char* невозможно преобразовать к const char * - из-за volatile. Поэтому оператор вывода строки здесь неприменим. Вместо него здесь срабатывает другой подходящий оператор: оператор для вывода значений типа bool.Так что у вас на самом деле нет никакого "выводит только 1 символ". Ни одного из ваших символов этот код не выводит вообще. Он выводит значение true, которое по умолчанию выводится как 1. Вы можете поменять строку на "abc", но выводиться все равно будет 1.
5
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 23.12.2019, 12:35 | |
|
TheCalligrapher,
А какая связь между volatile и bool? На каком основании происходит подобное преобразование?
0
|
|
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
|||||||
| 23.12.2019, 13:03 [ТС] | |||||||
0
|
|||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 23.12.2019, 15:03 | ||
char volatile * связь не с bool, а с тем, что стандартная перегрузка для char const * не подходит, потому что cv-квалификаторы не могут сниматься неявно.http://eel.is/c++draft/conv.bool#1
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 23.12.2019, 15:13 | |
|
DrOffset,
Спасибо, я почитал об это на SO, но до конца не понял почему это так. В bool можно, а в const char* нельзя, почему? Нашёл информацию что чтение из адреса объектов которые определены как volatile через указатель который не является volatile это UB. Вот думаю может по этой причине неявный каст не проходит... Если причина в этом, то возникает ещё один вопрос, почему подобное чтение должно приводить к UB?
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 23.12.2019, 15:16 | ||
const char * нельзя в char *, volatile, как и const, неявно не снимаются.
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 23.12.2019, 15:28 | |
|
DrOffset,
Ага, это по правилам так. только вот логика этого правила к сожалению мне не понятна ![]() Когда преобразование из const char* в char* тут логика понятна т.к исходный объект менять нельзя (например, в случае строкового литерала), это ок. Но какие проблемы может создать преобразование указателя с квалификатором volatile в указатель подобного типа но без volatile?
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 23.12.2019, 15:35 | ||
|
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 23.12.2019, 15:48 | ||
Добавлено через 13 минут DrOffset, Спасибо что старался, но до меня все равно не дошло )) По сути volatile это барьер для оптимизации, и если передать этот адрес в оператор вывода для чтения как это происходит для обычных строк то проблем быть не должно, контекст ведь поменяется. Там где мы сформировали volatile переменную будет барьер, а в операторе вывода просто вывод данных (тоже проблем нет). А если бы в операторе была бы запись, то полагаю тоже не было бы проблем. Просто в барьерном контексте считались бы обновлённые данные. Где и что тут может нарушиться я не понял ;( надеюсь смог передать свою мысль
0
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||||||||
| 23.12.2019, 16:22 | |||||||||||||
|
Добавлено через 15 минут ![]() volatile - это в первую очередь отказ компилятора от любых предположений насчет этой памяти. Одно и таких предположений - это неизменность извне, как следствие - кеширование: Вот пример:
А эта функция:
Понятно, что сам по себе этот код не имеет особого смысла, однако он демонстрирует разницу и в некоторых задачах эта разница существенна (т.е. когда нам нужно каждый раз получать самое актуальное значение, которое есть по указателю).
2
|
|||||||||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 23.12.2019, 16:41 | |
|
DrOffset,
Думаю я понял. Во втором случае значение по адресу p внутри функции mul может быть прочитано всего 1 раз несмотря на то что у нас два чтения. но где то в другом потоке значение p может быть изменено и по идее второе чтение должно дать результат отличный от первого чтения. Но второго чтения не будет ибо данные закешированы. О таком кейсе я не подумал (в голове крутился пример только с одним чтением поэтому я не видел проблем). Кстати раз уж разговор о volatile, скажи плиз на что он влияет когда указывается для метода (там где noexcept)? Аргументы/поля/локальные переменные/что-то другое?
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 23.12.2019, 16:43 | |
|
1
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 23.12.2019, 16:53 | |
|
DrOffset,
Спасибо. А какой в этом смысл? Поля могут быть закешированы как в предыдущем примере? И говоря про this имеется ввиду обращение к полям с явным использованием this или для обращений без явного использования this volatile тоже будет действовать?
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 23.12.2019, 16:59 | |
|
1
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 23.12.2019, 17:08 | |
|
DrOffset,
Спасибо. Если ты ещё поведаешь суть const volatile вместе то было бы круто ) Один говорит что данные могут быть изменены а другой что не могут быть изменены. Я нахожу это противоречивым ))
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 23.12.2019, 17:14 | ||
|
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 23.12.2019, 17:29 | |
|
DrOffset,
Интересно. Но разве можно поменять значения вне программы? Если да, то как (хотя бы в общих чертах)? Полагаю это может пригодится в каких то implementation-defined фичах
0
|
|
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
||||||||
| 23.12.2019, 17:31 [ТС] | ||||||||
|
Вы привели пример ситуации, когда ни волатильность, ни кэширование никак не влияют ни на логику работы самой функции, ни на итоговую логику вообще всей остальной программы. Можно просто считать, что компилятор сумел улучшить код функции так хорошо, что она начала работать со скоростью света, и значения попросту не успевают изменяться.
0
|
||||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 23.12.2019, 17:52 | |
|
eva2326,
По факту если на момент второго чтения значение на которое указывает p будет другим (отличным от первого чтения), то этот код не даст корректный результат (без volatile) А мой вопрос DrOffset у был немного другой ) Добавлено через 16 минут DrOffset, Нашёл пример. const volatile вместе может использоваться например для доступа к разделяемой памяти в режиме чтения При этом для других процессов эта разделяемая память может быть вполне модифицируемой
0
|
|
| 23.12.2019, 17:52 | |
|
Помогаю со студенческими работами здесь
20
Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream
Cout 16х выводит почему?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|