Как отметили ранее — нужно ощущение что вокруг есть жизнь, чтобы не было чувства заброшенности и упадка в городской среде.
Тоже такое есть. Вероятно, в Америке это компенсируется более высокой общительностью и открытостью людей (гипотеза).
в сабурбии на тихой улочке
Выросши в советской застройке, очень непривычно и тесно на узких улочках. А на открытых просторах с высокими домами ощущаешь комфортно и безопасно (не понятно, почему урбанисты считают, что высокие здания подавляют человека). К тому же, без личного садика/места для bbq не очень понятна прелесть жизни в частном доме (+насекомые из-за 1 этажа).
крутые парки в шаговой доступности
Но моё подсознание всё равно сравнивает с Москвой и не хватает дикого леса у метро.
Спасибо за пояснения.
Краткий вывод: можно использовать type cast только при:
1. приведении к базовому/наследному классу (они существуют);
2. приведении из void*, например, в pthread_create()'s start_routine (объект существует).
Во всех остальных случаях надо использовать placement new/std::start_lifetime_as.
Стандарт явно разрешает работать с любым объектом как с набором байт
(char[], unsigned char[], signed char[]) или любой фундаментальный тип?
Просто иначе странная ситуация: offsetof() существует, фундаментальный объект существует, а их обоих в сборе — нет.
Upd: вот это имелось в виду?
An operation that begins the lifetime of an array of char, unsigned char, or std::byte implicitly creates objects within the region of storage occupied by the array.
проблемы были лишь при попытке работы с набором байт как с объектом.
А какие проблемы? Компилятор может соптимизировать чтение из char* до и после изменения POD по тому же адресу?
А главное — зачем вводить новую функцию, а не «просто» перенести этот функционал на type cast "(T*)"?
std::start_lifetime_as actually creates a new object and starts its
lifetime (even if no code runs). On the other hand, std::launder never creates a new object, but
can only be used to obtain a pointer to an object that already exists at the given memory location
Что порождает несколько вопросов:
1. В примерах std::start_lifetime_as используется только для POD. Разве POD — не просто набор байт нужного размера с выравниванием?
2. Что за новая концепция «creates a new object»? И в чём её особенности для POD?
3. Если мы создали новый объект, то как его корректно уничтожить? И как не задеть уничтожение объекта, который тоже там находится (char[])?
4. Надо ли проводить такие же манипуляции для превращения POD/POD's fields в байты (например, при вызове memcpy() при подготовке к отправке по сети)?
Если индексы всё равно нужны, то накладных расходов нет.
Из особенностей: т.к. для контейнера вся структура ключ, то при необходимости модификации "значения" приходится либо помечать неключевые поля как mutable, либо делать const_cast (вопрос: как это делать канонично?). Использовать modify - явно не вариант, т.к. тогда итерирование замедляется в несколько раз.
Программирование не любит неточности. Как говорится: «Одна ошибка и ты ошибся».
Случайно поставил букву в рандомном месте программы? — compilation error
При этом есть бесконечное количество попыток, о которых никто не узнает. А система достаточно воспроизводима.
А есть подсказки, как тренироваться общению с людьми, когда в системе слишком много скрытых состояний и каждая следующая попытка другая?
потому что принимать решение по политическим соображениям с точки зрения жизни и особенно семьи, не очень правильно
Сомнительно. Освоить язык, прокачать софт-/хард-скиллы, открыть бизнес — всё это осуществимо (можно создать план). А вот как добиться политических изменений — не понятно, да и опасно для здоровья.
В Unix-time зафиксировано, что 1 день == 86400 секунд, потому чуть позже, когда появились високосные секунды, появилось требование не считать их (в итоге реальное количество секунд с 1970 на 27 секунд больше, чем возвращается time()).
Если же хочется заиспользовать правильные часы, есть таймзоны `right/*`: www.ucolick.org/~sla/leapsecs/right+gps.html
$ TZ=UTC date; TZ=right/UTC date
Mon Apr 4 16:46:45 UTC 2022
Mon Apr 4 16:46:18 UTC 2022
А в традиционной unix-tz такое невозможно:
$ TZ=right/UTC date -d @1483228826
Sat Dec 31 23:59:60 UTC 2016
Как только у тебя появляется хороший словарный запас, то дальше все становиться проще... Понять, что тебе говорят
Видимо, вам повезло с нейронами (или их развили какой-то особой деятельностью). Часто навыки распознавания на вид и на звучание - разные навыки. И на новый акцент надо снова обучаться (пусть и с использованием обученности на других).
Благодаря избыточности и существованию правил ща-ши, когда ш всегда читается твёрдой, а щ мягкой, унификация не должна принести неоднозначности. По крайней мере, в московском диалекте, где щ произносится как в японском シ.
Подвижки есть: www.winehq.org/announce/6.0 — модули переводят на PE (судя по описанию, это как раз для anti-cheat), добавляют возможность загружать drivers.
Да и то, что ради Wine в ядро добавили futex2, тоже показывает серьёзность намерений.
Тоже такое есть. Вероятно, в Америке это компенсируется более высокой общительностью и открытостью людей (гипотеза).
Выросши в советской застройке, очень непривычно и тесно на узких улочках. А на открытых просторах с высокими домами ощущаешь комфортно и безопасно (не понятно, почему урбанисты считают, что высокие здания подавляют человека). К тому же, без личного садика/места для bbq не очень понятна прелесть жизни в частном доме (+насекомые из-за 1 этажа).
Но моё подсознание всё равно сравнивает с Москвой и не хватает дикого леса у метро.
Краткий вывод: можно использовать type cast только при:
1. приведении к базовому/наследному классу (они существуют);
2. приведении из void*, например, в pthread_create()'s start_routine (объект существует).
Во всех остальных случаях надо использовать placement new/std::start_lifetime_as.
Не очень понятно, где проходит граница UB.
(char[], unsigned char[], signed char[]) или любой фундаментальный тип?
Просто иначе странная ситуация: offsetof() существует, фундаментальный объект существует, а их обоих в сборе — нет.
Upd: вот это имелось в виду?
А какие проблемы? Компилятор может соптимизировать чтение из char* до и после изменения POD по тому же адресу?
А главное — зачем вводить новую функцию, а не «просто» перенести этот функционал на type cast "(T*)"?
Что порождает несколько вопросов:
1. В примерах std::start_lifetime_as используется только для POD. Разве POD — не просто набор байт нужного размера с выравниванием?
2. Что за новая концепция «creates a new object»? И в чём её особенности для POD?
3. Если мы создали новый объект, то как его корректно уничтожить? И как не задеть уничтожение объекта, который тоже там находится (char[])?
4. Надо ли проводить такие же манипуляции для превращения POD/POD's fields в байты (например, при вызове memcpy() при подготовке к отправке по сети)?
Если индексы всё равно нужны, то накладных расходов нет.
Из особенностей: т.к. для контейнера вся структура ключ, то при необходимости модификации "значения" приходится либо помечать неключевые поля как mutable, либо делать const_cast (вопрос: как это делать канонично?). Использовать modify - явно не вариант, т.к. тогда итерирование замедляется в несколько раз.
При этом есть бесконечное количество попыток, о которых никто не узнает. А система достаточно воспроизводима.
А есть подсказки, как тренироваться общению с людьми, когда в системе слишком много скрытых состояний и каждая следующая попытка другая?
Сомнительно. Освоить язык, прокачать софт-/хард-скиллы, открыть бизнес — всё это осуществимо (можно создать план). А вот как добиться политических изменений — не понятно, да и опасно для здоровья.
Если же хочется заиспользовать правильные часы, есть таймзоны `right/*`: www.ucolick.org/~sla/leapsecs/right+gps.html
А в традиционной unix-tz такое невозможно:
А что если антибиотики стали брать, потому что уже нельзя марганцовкой прополоскать горло, которую запретили зачем-то.
Видимо, вам повезло с нейронами (или их развили какой-то особой деятельностью). Часто навыки распознавания на вид и на звучание - разные навыки. И на новый акцент надо снова обучаться (пусть и с использованием обученности на других).
Ещё 1 гипотеза: В "идёт" ударение на ё, соответственно этот слог читается высоким тоном. А в "идиот" только о ударная, что делает тон восходящим.
Учитывая, что мы на тоны не особо обращаем внимание (это эмоциональная инфа, а не грамматическая), то спутать весьма легко.
https://www.youtube.com/watch?v=iv-Y_DZmKdA&t=247s
Да и то, что ради Wine в ядро добавили futex2, тоже показывает серьёзность намерений.
Иначе: используйте gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html.
Дорогой, медленный, ABI-несовместимый способ, зато без UB.