Constexpr非成员函数和参考Argos

时间:2017-02-04 06:43:54

标签: c++ constexpr

如果我有一个非成员constexpr函数接受参考参数,它必须是常量引用

2 个答案:

答案 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运算符只能确保非成员函数的数据不会被更改 - 但是,如果你通过了 参数,此外来参数可能会更改