相关疑难解决方法(0)

constexpr函数中的非constexpr调用

这是一个简化的例子,代码用于生成任意值的序列(在某种意义上std::iota)和不同类别的迭代器:

struct delta
{
    template<typename I>
    void inc(I& i) { ++i; }

    template<typename I>
    I next(I i) { inc(i); return i; }
};
Run Code Online (Sandbox Code Playgroud)

有许多类,如delta,每一个都限定inc不同,例如--i,i += step,i -= step,i *= step,f(i)等功能next保持不变,实际上是在基类共享.

我们正在next从变异操作中产生基于价值的操作inc.相反的做法是相同的,但是我们选择这种设计来提高性能,因为next只能在某些初始化时inc调用,而可能被称为一百万次.

问题是,如果某些参数是编译时常量,我想next在编译时调用给定一个constexpr参数i.

这在C++ 11中是不可能的,因为调用了非constexpr函数inc.只需改为

template<typename I>
constexpr I next(I i) { inc(i); return i; …
Run Code Online (Sandbox Code Playgroud)

c++ constexpr c++11 c++14

6
推荐指数
1
解决办法
4984
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

constexpr ×1