TGViewer
C++: Хроники Дурки🚑 C++: Хроники Дурки🚑 @cpp_durka · 916 subscribers
Post #28 705
Ну, к разного рода наркомании, что


std::cout << a[42] << std::endl;
std::cout << 42[a] << std::endl;


Это одно и то же - все уже привыкли.

А как насчет инициализации массива с указанием ренжа индексов?
Типа:


static constexpr int a[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };


Или инициализации единицы для вайтспейстов:


int whitespace[256] =
{
[' '] = 1, ['\t'] = 1,
['\f'] = 1, ['\n'] = 1,
['\r'] = 1
};


Это нормально без дополнительных выкрутасов работает на clang, правда, грустит и плюется ворнингами.

Эта штука называется Designated Initializers, и является частью ISO C99, а С++ пытается быть совместимым с С90, а 99 - оно так, по желанию.

На годболте у меня так и не получилось скомпилировать вот такой пример на gcc:


#include <iostream>

int main() {
static constexpr int a[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

std::cout << a[42] << std::endl;
std::cout << 42[a] << std::endl;

int whitespace[256] =
{
[' '] = 1, ['\t'] = 1,
['\f'] = 1, ['\n'] = 1,
['\r'] = 1
};

return 0;
}



однако локально он нормально компилируется вот такой командной строкой:


g++ --std=gnu++23 main.cpp


Вот какие-то такие развлечения....
godbolt.org Compiler Explorer - C++ int main() { static constexpr int a[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; std::cout << a[42] << std::endl; std::cout << 42[a] << std::endl; int whitespace[256] = { [' '] = 1, ['\t'] = 1, ['\f'] = 1, ['\n']…
  • 👏 11
  • 😁 9
  • 🥴 6
  • ❤ 1
More from @cpp_durka
  1. Sep 8, 2026Мошенники заставили пенсионерку из Москвы переписать квартиру на Rust
  2. Aug 31, 2026Всяко разное болезненное есть в С++, из всего болезненного одно из самых болезненных - это…
  3. Aug 24, 2026Если кто не знаком с библиотекой nlohmann/json - она прекрасна. Мои мысли о том, как должн…
  4. Aug 21, 2026#толькосвоимемы Код взят тут. if (dim == 0) idx_dim = i0; else if (dim == 1) idx_dim = i1;…
  5. Aug 17, 2026Ладно, искать баги в компиляторах весело, но недостаточно. Давайте поиграемся в чуть более…
  6. Aug 10, 2026Ладно, разумеется прошлый пост был набросом. Никогда не обновляйте компиляторы без очень с…
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 →