Если у меня не функция члена constexpr принимая ссылочный параметр это должно быть Постоянной ссылкойConstexpr функция без элемента и опорного Argos
ответ
Если у меня не функция члена constexpr принимая ссылочный параметр у него есть быть постоянной ссылкой?
Нет, это не так, но это лучше.
Основная цель функции constexpr
- оценивать выражения во время компиляции. Не имеет смысла передавать ссылку на такую функцию не const
. Если вы решите изменить входной объект в функции, я должен спросить вас, почему? Если вы не изменяете входной объект, лучше использовать ссылку const
, так же как всегда полезно создавать функции-члены, которые не изменяют объект, чтобы быть функциями-членами const
.
Следующий код не работает, так как временный объект не может быть использован, когда функция ожидает Непро- const
присвоенного
struct Foo { int i; };
constexpr bar(Foo& f) { return f.i * 2; }
int main()
{
int arr[bar({20})]; // Can't use a temp object
}
Следующий код работает. Эта функция может использоваться как с временными объектами, так и с объектами, которые могут использоваться как lvalues.
struct Foo { int i; };
constexpr bar(Foo const& f) { return f.i * 2; }
int main()
{
int arr[bar({20})];
Foo f{20};
int v = bar(f);
}
Любые ссылки или ссылки –
@BlairDavidson, я добавил немного больше описание, чтобы объяснить свою «лучшую» квалификацию. Надеюсь, это имеет смысл. –
Короткий ответ: Нет
Длинный ответ: Нет, потому что оператор const
только гарантирует, что данные функции, не являющихся членами не будет изменен - однако, если вы передаете параметр , этот внешний параметр может быть изменен
Пожалуйста, пост [MCVE] – Jonas