Многие оптимизации зависят от того, как используются данные, например.
Скажем у нас есть код экспоненциальной сложности написанный давно и мудрено, но всего имеем не более 5-ти элементов.
Как мы уговариваем начальство о необходимости изменений если время работы оценочно будет недели три, да ещё и возможно внесем ошибки, а проку сегодня абсолютно ноль.
Да, может через год надо будет переписывать но это уже будут не наши проблемы ;-)
Или более простой пример, у нас есть список, как его хранить? Как массив, как связанный список, как хэш таблицу? У каждого подхода есть плюсы и минусы, а заранее знать что будет через пару лет невозможно.
Надо перевести на Java и задействовать ИИ.
https://habr.com/ru/amp/publications/758434/
Подбросить вам ?
Если что , я не согласен с доводами, что решение это указатель на функцию , но всё же std::function мог быть чуть оптимальней
C++23 привносит move_only_function для решения проблемы.
https://ricomariani.medium.com/std-function-teardown-and-discussion-a4f148929809
Добавлю 5 копеек
https://gist.github.com/shafik/848ae25ee209f698763cffee272a58f8
Как раз и есть UB.
https://acm.bsu.by/wiki/C2017/Неопределённое_поведение#.D0.A7.D1.82.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B8.D0.B7_.D0.BD.D0.B5.D0.B8.D0.BD.D0.B8.D1.86.D0.B8.D0.B0.D0.BB.D0.B8.D0.B7.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D1.85_.D0.BF.D0.B5.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.BD.D1.8B.D1.85
Сборка Хрома тот ещё квест.
Целый блог ведётся про постоянные проблемы при сборке
https://randomascii.wordpress.com/2023/03/08/when-debug-symbols-get-large/
Почему исключение ? Всё читается справа налево в каноническом виде.
Это как раз вариант где const можно ставить слева не является каноническим.
Поэтому некоторые стандарты кодирования предлагают всегда ставить const справа.
Нет разницы
char const* == const char*
Указатель на константный символ
Адрес менять можно содержимое нельзя
char * const
Тут уже будет константный указатель на символ
Адрес менять нельзя , а содержимое можно.
Чаще всего используют const char* называя это константный указателем, что ещё больше вносит путаницы.
В C++ как раз типом будет char const [N] как и ожидается.
Пишите на C++ ?
Есть флаг задающий беззнаковость:
https://learn.microsoft.com/en-us/cpp/build/reference/j-default-char-type-is-unsigned?view=msvc-170
Доступ открыт поэтому есть проект https://github.com/ungoogled-software/ungoogled-chromium целью которого убрать все привязки Гугла.
Стоит иметь ввиду, что обычно стандарт кодирования C# это использование ключевых слов вместо полных имён System.Int64.
Вообще-то удаляют постепенно Removed , Deprecated
Это уже другая проблема :)
Вы имеете ввиду встроенными программами?
Чем групповые политики недостаточны?
Их можно ещё и автоматизировать .
Также как и удаление других компонентов.
Есть программы и скрипты если нужны рюшечки как:
Shut10 , https://privacy.sexy
Не нужна отдельная клавиша.
Достаточно Caps Lock задействовать.
Быстрое нажатие переключение языка, длительное смена на ЗАГЛАВНЫЕ БУКВЫ.
Расскажите как вы это делаете на практике.
Многие оптимизации зависят от того, как используются данные, например.
Скажем у нас есть код экспоненциальной сложности написанный давно и мудрено, но всего имеем не более 5-ти элементов.
Как мы уговариваем начальство о необходимости изменений если время работы оценочно будет недели три, да ещё и возможно внесем ошибки, а проку сегодня абсолютно ноль.
Да, может через год надо будет переписывать но это уже будут не наши проблемы ;-)
Или более простой пример, у нас есть список, как его хранить? Как массив, как связанный список, как хэш таблицу? У каждого подхода есть плюсы и минусы, а заранее знать что будет через пару лет невозможно.
RVO/NRVO и обязательный RVO в C++17 также ломает часть логики завязанную на вызов копирования.
Но ничего, все довольны.
Насчёт автоматического перемещения в последнем использовании есть уже предложение добавить в C++: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2666r0.pdf
Я не говорил, что введение простого using это плохо.
Как раз это очень удобно.
Это если один за другим.
А бывает и не так.
using var a = GetA();
Log.Write(“Start”);
using var b = GetB();
Тут также следует отметить разную семантику о которой частенько забывают.
В случае с блоком ресурс освободится сразу в конце блока, а без него только в конце функции.
Тут надо смотреть в оба, что действительно подходит.