Size: a a a

2020 December 17

D

Dmitriy in pro.cxx
Суть в том, что контейнер будет юзаться в многопоточной среде, где внешние пользователи будут иметь доступ к некоторым полям хранимых элементов по ссылке. Синхронизацию на уровне обращений ко всему контейнеру сделать не проблема, а вот что насчёт его содержимого и его неожиданных перемещений в памяти самим контейнером - не совсем понял из документации
источник

IZ

Ilia Zviagin in pro.cxx
Dmitriy
Могу ли я считать, что если итераторы не инвалидируются (единственная найденная инфа), то и вышеперечисленное остается в нормальном состоянии после вставки/рехэша?
Тут даже есть логическая ошибка у тебя. Итераторы могут и не инвалидироваться, потому что имеют внутри какой-то механизм для защиты от этого (предположение).
А прямые ссылки на элементы — могут инвалидироваться.
Теперь вспомним, что в главном контейнере — так сказать, таблице, - задаётся контейнер, который хранит данные.
Это либо вектор, либо дэк, либо список может быть. Так?

Ну так тогда вот инвалидируемость ссылок на данные как раз будет определяться этим контейнером.
Будет вектор - ссылки могут инвалидироваться. Будет список - уже нет.
источник

D

Dmitriy in pro.cxx
Ilia Zviagin
Тут даже есть логическая ошибка у тебя. Итераторы могут и не инвалидироваться, потому что имеют внутри какой-то механизм для защиты от этого (предположение).
А прямые ссылки на элементы — могут инвалидироваться.
Теперь вспомним, что в главном контейнере — так сказать, таблице, - задаётся контейнер, который хранит данные.
Это либо вектор, либо дэк, либо список может быть. Так?

Ну так тогда вот инвалидируемость ссылок на данные как раз будет определяться этим контейнером.
Будет вектор - ссылки могут инвалидироваться. Будет список - уже нет.
Предположение основано на том, что в STL нет ни одного контейнера, который сохранял бы валидность итераторов при инвалидации ссылок.
Наоборот - валидность ссылок при инвалидации итераторов - да. Привет деку и unordered map.
источник

c

crea7or in pro.cxx
Ofee
Предлагаете для std::byte перечислить все валидные значения? Собственно, на cppref и пояснение есть:
This makes it possible to introduce new integer types (e.g. SafeInt) that enjoy the same existing calling conventions as their underlying integer types, even on ABIs that penalize passing/returning structures by value.

Если же вопрос не только про инициализацию, то... как использовать тогда битовые маски, будь такой каст нелегален?
причём тут byte? если что-то принимает Handle как параметр, чтобы он мог быть только перечисленных значений, а не что угодно - это тогда исключительная ситуация. Я про этот параграф и написал, ради чего разрешили это.
источник

ПК

Побитый Кирпич... in pro.cxx
crea7or
причём тут byte? если что-то принимает Handle как параметр, чтобы он мог быть только перечисленных значений, а не что угодно - это тогда исключительная ситуация. Я про этот параграф и написал, ради чего разрешили это.
> причём тут byte

При том, что byte это enum class.
источник

O

Ofee in pro.cxx
crea7or
причём тут byte? если что-то принимает Handle как параметр, чтобы он мог быть только перечисленных значений, а не что угодно - это тогда исключительная ситуация. Я про этот параграф и написал, ради чего разрешили это.
Это уже вопрос договоренности и семантики, определяемой для данного типа. В равной степени может подразумеваться и то, что набор возможных значений ограничен явно перечисленным, и то, что в действительности может содержаться внутри что угодно. Обе концепции имеют право на жизнь

Правильно ли я понимаю, что ваш вопрос также касается и перечислений с явно определенным underlying type?
источник

c

crea7or in pro.cxx
с явно определённым тяжело идеологическую основу подвести, мне нравится идея иметь какое-то перечисление, которое никуда не преобразуется и не кастится само как минимум, а лучше совсем никак. этакий недотип/полукласс. может уже есть такое?
источник

c

crea7or in pro.cxx
хотя без явных не будет переносимости хорошей.
источник

ПК

Побитый Кирпич... in pro.cxx
crea7or
с явно определённым тяжело идеологическую основу подвести, мне нравится идея иметь какое-то перечисление, которое никуда не преобразуется и не кастится само как минимум, а лучше совсем никак. этакий недотип/полукласс. может уже есть такое?
struct my_enum_t {
 int value;
};

constexpr my_enum_t VALUE1 { 10 };
constexpr my_enum_t VALUE2 { 100 };
источник

AM

Alisher Magametiliev in pro.cxx
Ilia Zviagin
Не читай. Читай: Прата, Лимпман.
Аа ты про язык программирования с++ базовый курс (лимпман)
источник

IZ

Ilia Zviagin in pro.cxx
Alisher Magametiliev
Аа ты про язык программирования с++ базовый курс (лимпман)
да
источник

m

magras in pro.cxx
crea7or
с явно определённым тяжело идеологическую основу подвести, мне нравится идея иметь какое-то перечисление, которое никуда не преобразуется и не кастится само как минимум, а лучше совсем никак. этакий недотип/полукласс. может уже есть такое?
enum'ы так себя и ведут. Произвольное значение в них можно записать только при помощи explicit конструктора или каста.

А жестко запретить другие значения в С++ не получится. Лучшее что можно сделать это объявить получение таких значений UB, что не дает ничего.
источник

IZ

Ilia Zviagin in pro.cxx
magras
enum'ы так себя и ведут. Произвольное значение в них можно записать только при помощи explicit конструктора или каста.

А жестко запретить другие значения в С++ не получится. Лучшее что можно сделать это объявить получение таких значений UB, что не дает ничего.
Так вроде и так это - UB.
источник

m

magras in pro.cxx
Ilia Zviagin
Так вроде и так это - UB.
Нет конечно. Битовые маски флагов часто используются. std::byte уже приводили в пример.
источник

O

Ofee in pro.cxx
Ilia Zviagin
Так вроде и так это - UB.
Только для unscoped enum без явно определенного underlying type, для всего остального это легально
источник

IZ

Ilia Zviagin in pro.cxx
Ofee
Только для unscoped enum без явно определенного underlying type, для всего остального это легально
Перечту...
источник

O

Ofee in pro.cxx
Ilia Zviagin
Перечту...
Возможно, немного смогу сэкономить время, здесь довольно подробный разбор со ссылками на стандарт и упоминанием некоторых неочевидных вещей
источник

AT

Anatoly Tomilov in pro.cxx
Здесь во втором случае result is unspecified? Если верить этому.
источник
2020 December 18

SM

S M in pro.cxx
Всем привет

Подскажите пожалуйста в vs code проблема с настройкой дебаггера

Использую Cygwin, в настройках launch.json и tasks.json пути задаются с разделителем \\.  При этом при запуске компиляции и дебага backslash пропадает. Как можно исправить данную ситуацию?
источник

AF

Aidar Fattakhov in pro.cxx
crea7or
А что это за ABI такие, ради которых разрешили scoped enums мусором инициализировать в С++17 ?
Abi называется byte
источник