что такое настоящий компилятор кода для process () генерируется после того, как мы вызываем код выше в основной функции.
process()
не является функцией, и ее скомпилированная версия не создается (по крайней мере, в типичных реализациях); скорее ваша программа производит четыре отдельных функции, а именно process<bool>
, process<int>
, process<double>
и process<std::string>
, каждая из которых имеет свою собственную скомпилированную версию.
И это не относится только к if constexpr
& mdash; это просто, как шаблоны работают в целом в C ++.
Эти скомпилированные версии могут полностью опускать ветви оператора if
, которые не сохраняются для аргумента типа; так, например, process<bool>
такой, как если бы он был определен так:
template<>
bool process<bool>(bool arg)
{
return !arg;
}