Как стать автором
Обновить
2
0

Пользователь

Отправить сообщение
Даже сейчас вы не можете завершить поток при этом быть уверенным что освободили все ресурсы и остановили все потоки который тот успел породить.

Я всё могу:


my_thread.cancel(); // сообщаем потоку что ему пора остановиться.
my_thread.join(); // дожидаемся пока поток остановится

// В этой точке есть гарантия, что все ресурсы освобождены и дочерние потоки остановлены.

Фрагментация жёсткого диска

Использование после перемещения и сейчас считается дурным тоном.

Ага, после того как выпил из чашки чай (переместил чай из чашки в желудок), её следует уничтожить.

К сожалению (или к счастью) параметры consteval функции не являются constant expression. Вот такой вот парадокс. Так что передавать constexpr значения в функцию можно пока только через шаблонные параметры, либо передавать в функцию объекты заглушки, а сами значения получать через decltype(paramN)::value.
Почему в принципе есть возможность успешно скомпилировать программу обращающуюся к неинициализированной переменной на чтение хоть с какими-то настройками компилятора?

Потому что в общем случае это невозможно диагностировать.
Пример:
int i;
if (some_runtime_dependent_condition()) {
    cin >> i;
}
if (another_runtime_dependent_condition()) {
  cout << i;
}

Мы административно гарантируем, что
another_runtime_dependent_condition()
равна true только когда
some_runtime_dependent_condition()
тоже равна true (это гарантируется, скажем, архитектурой).

Так что все эти «простые» UB на деле не диагностируемые. А в тех частных случаях, когда UB очевидно, компиляторы действительно пытаются сообщить юзеру. По крайней мере msvc с дефолтными настройками отказывается компилировать, если видит очевидное чтение неинициализированной переменной или выход из функции без return.
В ТГ чате упоминалось, что США выдвинуло замечание на фикс ключевых слов в корутинах (предложение Антона, которое не прошло ранее). Я так понимаю, успехов они не добились?
Всё ещё можно переприсваивать.
Такие параметры конструктора приводят к комбинаторному взрыву перегрузок. Самый православный вариант — шаблонный конструктор с forward reference, там тоже нет лишнего мува, но и конструктор всего один.
Вы путаете undefined behaviour и unspecified. Последнее как раз должно быть определено компилятором (но не обязательно документировано). А при undefined никто ничего никому не должен. Программа, его содержащая более не считается программой на языке С++. Что и используют разработчики компиляторов для проведения жёстких оптимизаций.
Не хочется Вас расстраивать, но С++ никогда не был языком со строгой типизацией :). Со статической да, но не строгой.
Но ведь в С++ std::variant (представляющий тип сумму точно также, как std::function представляет функцию) — это как раз объект первого класса…
В этом и заключается вся прелесть С++. Он позволяет выражать в коде огромное количество разнообразных моделей. То, что реализация при этом сложно-читаема для неподготовленного зрителя — некритичный недостаток. Да и приведённая здесь шаблонная магия не такая уж и чёрная, есть и покруче приёмы :)
Как Google узнаёт всю эту информацию? Или там просто эвристика типа
«Ну, судя по его поисковым запросам, он гей»?
Тем не менее, вероятность конкретных последствий на распространенных платформах с распространенными компиляторами выше остальных. О вероятности уже рассуждать можно.
У нас есть предположение, что на первом мудреце не белый колпак (мы должны это опровергнуть). Оба других мудреца видят, что у первого не белый колпак. В то же время, они оба знают, что белый колпак обязательно существует на одном из них. Другими словами, если предложение верно, то можно вычеркнуть первого мудреца из системы, так как его наличие не влияет на результат.

Если перед вами 100 мудрецов с небелыми колпаками и один с белым, и вы видите, что мудрец с белым колпаком не догадывается что он с белым, то вывод очевиден — вы с белым колпаком тоже.
auto в C++ намного мощнее, чем в Java и C#. Оно там используется не только для вывода типа локальной переменной, но и для вывода возвращаемого значения из функции, вывода типов аргументов для лямбд.
Что такое sizeof(byte)?

1) sizeof(T) возвращает размер типа T в байтах.
2) sizeof(char) == 1 всегда, следовательно char и есть байт по размеру.
3) Платформозависимым является не размер типа char, а количество бит в одном байте (а значит и в одном char-е). За это отвечает константа CHAR_BIT.

Источник: документация по C++
Это не production код. Это код библиотеки.

В production будет 2 строчки и Вы автоматически получите (например) возможность сериализации любого POD типа.

Беспокоиться о читаемости в данном случае не Ваша забота, а забота автора библиотеки, не Вы же ее поддерживаете.
Вы специально открываете статьи по C++, чтобы в очередной раз убедиться в его сложности и сообщить об этом всем окружающим?

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность