TGViewer
this->notes. this->notes. @thisnotes · 4.53K subscribers
Post #139 777
#list

Несколько рандомных фактов.

1. Посмотрим на такой код:

struct Kek { int lol; int kek; };
std::vector<Kek> keks;
for (const auto&
[lol, kek] : keks) {
[=] { std::cout << lol << "\n"; }();
}


Неожиданно, он не скомпилируется. Не скомпилируется он на моменте обращения к переменной lol в лямбде. Странно, да?🤔
На самом деле переменные из structure binding не умеют захватываться в лямбды (это, стоит надеяться, временно). Немножко пояснений можно посмотреть тут.

Кстати примерно из-за этого же structure binding становится пацаном довольно неровным, потому что начинает ломать всякое NRVO. Будьте аккуратны.

2. Попался один интересный доклад на CppCon 2016 про оптимизацию вашего кода. Автор предлагал использовать принцип DRY не только в случае написания кода, но и с шаблонами:

struct B {
virtual ~B() = default;
};

template <typename T>
struct D : B {
std::vector<int> get() const { return m_v; }
std::vector<int> m_v;
};


Учитывая, что для каждого инстанцирования код класса по факту будет копироваться, стоит вынести всё что можно в базовый класс:

struct B {
virtual ~B() = default;
virtual std::vector<int> get() const { return m_v; }
std::vector<int> m_v;
};

template <typename T>
struct D : B {};


Так сказать взгляд с другой стороны.
Посмотрите доклад. Там прикона : )

3. При использовании std::function<void(args...)> (с возвращаемым типом void) к такому объекту можно кастовать любой функтор с такими же аргументами, но любым возвращаемым типом. То есть вот такое будет компилироваться:

std::function<void()> f{[] -> int {return 1;}};

Руками полезность этой фичи я пока не ощутил, но говорят, что бывает удобно, когда хочешь показать пользователю, что некоторая функция не использует возвращаемое значение/в схемах с коллбеками и подобном.


И ещё немного ссылочек на выходные:

0. Интересный доклад о переписывании базы данных личных сообщений в Вк.

1. Обзорный доклад про очереди в highload.

2. Статья про то, как важно уметь отказываться от уже сделанного.

3. Удобное сокращение для стандартных стримов в C++: https://github.com/vitaut/_._ (sorry).

4. Статья про некоторые отличия в реализациях частей C++ от разных компиляторов.

5. Новый формат QOI (qoiformat.org), который неплохо сжимает картинки, на уровне PNG, но при этом в десятки раз быстрее, а его спецификация -- одна страница.
  • 👍 3
  • ❤ 1
More from @thisnotes
  1. Sep 17, 2026#common Сидите вы себе спокойно, разрабатываете поиск каких-нибудь объектов. Может это тов…
  2. Sep 9, 2026#cpp #books Да, книга 2001ого года. Мы ровесники. И да, в ней в основном обсуждаются какие…
  3. Sep 2, 2026#perf Попробовал собрать в кучку (кажется, немного сумбурно всё же) мысли по двум моментам…
  4. Aug 31, 2026Давайте новый тег заведём: #perf Во-первых, надо понять, что я вообще понимаю под перфом,…
  5. Aug 27, 2026#common Мы часто делаем системы, которые обладают какими-то ограничениями. Ограничения наш…
  6. Aug 24, 2026#list 0. [talk] Achieving Peak Performance for Matrix Multiplication in C++. Aliaksei Sala…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →