我可以使用const&作为constexpr函数的参数?

时间:2015-01-12 13:40:58

标签: c++11 constexpr stdarray

我正在编写constrexpr函数,使用CArray T(&)(N)std::array。 我想我必须写两个函数(如果你知道的话我会很高兴知道),

但是我关心用std :: array

写的东西
    constexpr float LinInterp01(const std::array<float, N>& inArray, float inX);

编写constrexpr函数以传递const&amp;时是否正确?或不?

我认为应该是因为在编译时编译器会实例化一个副本,并且在编译时没有L值的概念。

有人能解释一下吗?

1 个答案:

答案 0 :(得分:1)

C ++标准部分§7.1.5[dcl.constexpr]

  

constexpr函数的定义应满足以下约束条件:

     

- 它不应是虚拟的(10.3);

     

- 其返回类型应为文字类型;

     

- 每个参数类型都应为文字类型;

第3.9节[basic.types]

  

类型是文字类型,如果它是:

     

- 无效;或

     

- 标量类型;或

     

- 参考类型;或

     

- 一个文字类型的数组;或

     

- 具有以下所有属性的类类型(第9节):

     

- 它有一个简单的析构函数,

     

- 它是聚合类型(8.5.1)或至少有一个constexpr构造函数或构造函数模板   这不是复制或移动构造函数,

     

- 它的所有非静态数据成员和基类都是非易失性文字类型。

所以,您可以通过参考constexpr函数传递参数。

现在是否在编译时实际评估函数调用取决于LinInterp01的正文和调用。