1

CArray T(&)(N)我正在编写一个使用 a或 a的 constrexpr 函数std::array。我想我必须编写 2 个函数(如果你知道得更好,我会很高兴知道),

但我担心我用 std::array 写的东西

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

编写 constreexpr 函数以通过 const & 传递时是否正确?

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

有人可以解释一下吗?

4

1 回答 1

1

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

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

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

— 它的返回类型应为文字类型;

— 它的每个参数类型都应该是文字类型

第 3.9 节 [basic.types]

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

- 空白; 或者

— 标量类型;或者

引用类型;或者

— 文字类型的数组;或者

— 具有以下所有属性的类类型(第 9 条):

— 它有一个微不足道的析构函数,

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

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

所以的,您可以通过引用constexpr函数来传递参数。

现在,您的函数调用是否会在编译时实际进行评估取决于LinInterp01.

于 2015-01-12T14:19:54.153 回答