Параметр функции никогда не является константным выражением.Помните, что функции constexpr
похожи на обычные функции.Они также могут быть вызваны во время выполнения.Поэтому мы не можем предполагать, что адрес, переданный в param
, является чем-то, что является константным выражением, и поэтому не можем использовать его для инициализации переменной constexpr
или возвращаемого значения.
Вы можете передать строковые литералы функциям constexpr
и выдать constexpr
результатов, , например :
constexpr bool find(const char *param) {
return (param[0] == 0);
}
int main()
{
constexpr bool result = find("abcde"); // OK!
}
Функция вызывается в константном выражении, если задано константное выражение.Но он не может предполагать, что его когда-либо называют только постоянным выражением (я знаю, можно подумать об этом косоглазым).