Здравствуйте, so5team, Вы писали:
BFE>>>>Ну раз нет динамического выделения памяти, значит нет виртуальных функций,
S>>>Каким боком динамическая память к виртуальным функциям?
BFE>>А зачем вам виртуальные функции если у вас есть целый объект?
S>А каким боком виртуальность функций к целому или не целому объекту?
Если у вас есть указатель на базовый класс, то вызов виртуального метода оправдан.
Но откуда у вас указатель, если все объекты либо глобальные/статические, либо лежат на стеке? (разумеется рекурсивные вызовы без ограничения глубины на стеке запрещены)
S>Есть ощущение, что вам матчасть нужно сперва подучить.
Это иллюзия.
S>>>Опять же, где именно шаблоны, лямбды или structured binding с if constexpr взаимоувязаны с динамической памятью?
BFE>>Вопрос не только в динамической памяти, это просто пример. Всё гораздо сложнее.
S>Давайте разберемся с более простыми вещами: где именно шаблоны, лямбды или structured binding с if constexpr взаимоувязаны с динамической памятью?
Никак не увязаны.
BFE>>Например, в std::array::at(size_type n ); есть ветка бросающая исключение. Если в коде нет ошибки, то эта ветка никогда не вызовется => нет 100% покрытие кода тестами => проверка кода провалена. Я же писал: бюрократия и особые требования.
S>Так у вас если нет динамической памяти и исключений не будет.
Это почему вы так думаете? Насколько я помню стандарт, память под исключения выделяется особым образом. Вроде бы implementation defined.
S>О каких-таких ветках вы говорите?
00164 const_reference
00165 at(size_type __n) const
00166 {
00167 if (__n >= _Nm)
00168 std::__throw_out_of_range(__N("array::at")); <--- об этой ветке
00169 return _M_instance[__n];
00170 }
источник