如果我有一个非成员constexpr函数接受参考参数,它必须是常量引用
答案 0 :(得分:0)
如果我有一个非成员constexpr函数,参考参数是否必须是常量引用?
不,它没有,但它更好。
constexpr
函数的主要目的是在编译时计算表达式。将非const
引用传递给此类函数是没有意义的。如果您选择修改函数中的输入对象,我将不得不问您为什么?如果你没有修改输入对象,最好使用const
引用,就像制作不修改对象的成员函数一样是个好主意{{ 1}}成员函数。
以下代码不起作用,因为当函数需要非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
}
答案 1 :(得分:0)
简短回答:不。
答案很长:不,因为const
运算符只能确保非成员函数的数据不会被更改 - 但是,如果你通过了
参数,此外来参数可能会更改