BadCats
@BadCats

Сервис для изучения c++ кода (+ еще один вопрос о constexpr в качестве примера)?

Необходим сервис, который смог бы продемонстрировать внутреннюю работу библиотек , компилятора и выделения памяти в реальном времени. Что-то наподобие https://godbolt.org/ - но этот сервис скорее про устройство компилятора и ассемблер(само-собой). Меня же интересует сервис, где в реальном времени, при выполнении кода можно будет смотреть все внутренние вызовы между библиотеками и встроенными типами.
Приведу более конкретный пример. Мне не понятно, как выделяется память под constexpr объекты класса,т.к не понятно, как вычисляется размер класса (нет, кончено размер класса - это сумма размеров всех его членов - переменных и т.д), но не понятен процесс и последовательность выделения в памяти, в том смысле, что если я буду создавать constexpr объект производного класса, то компилятор перейдет к данному классу - вычислит его размер и получается будет вынужден вычислить и размер базового класса, который не является constexpr?
Но, насколько я знаю, если что-то в constexpr выражении является не constexpr - то все выражение становится не constexpr?
Например:
constexpr int inc (int a)
{
	return a + 1;
}

void func()
{
	int a = inc (3);
	constexpr int b = inc (a); // ошибка: a не является constexpr-выражением, из-за чего возвращаемое значение не имеет спецификатор constexpr
}

(Источник: https://habr.com/ru/post/228181/)
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Вы пытаетесь делать ненужную и бессмысленную работу.
Первый довод - все компиляторы C++ устроены по разному и от версии к версии их внутренняя кухня сильно меняется. Напоминаю, что у C++ нет даже стабильного ABI

Далее, большая часть библиотек C++ - это шаблоны, которые при компиляции превращаются в дикий фарш с кучей оптимизаций. Так что если вы что-то там поняли в одном случае, не даст вам информации о том, как это будет работать в остальных случаях.

Если внутри constexpr появится что-то не-constexpr, компилятор пошлет вас в баню. И правильно сделает.

Все гарантии о C++ имеются только в стандарте. Прочие попытки сделать доводы о том, как работает компилятор и как работает бинарник будут скорее всего фантазиями или частными случаями, не применимыми в иных ситуациях или при других настройках оптимизации.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы