切换constexpr功能

在Wiki中发现以下声明:

C ++ 11引入了constexpr声明函数的概念; 一个可以在编译时执行的函数。 它们的返回值可以被需要常量表达式的操作使用,例如整型模板参数。 但是,C ++ 11 constexpr函数只能包含返回的单个表达式(以及static_asserts和少量其他声明)。

C ++ 14放宽了这些限制。 Constexpr声明的函数现在可能包含以下内容:有条件的

  • ...
  • 分支语句ifswitch
  • 那么,实际上是否可以在c ++ 14 / c ++ 17的constexpr函数中进行切换? 而且,如果可能的话,那是什么语法? 例如,我想要这样的东西:

    enum class Terrain : std::uintmax_t {
        ROAD,
        SOIL,
        GRASS,
        MUD,
        SNOW,
    };
    
    constexpr float
    getStepPrice(Terrain const& terrain)
    {
        switch constexpr (terrain)
        {
            case Terrain::ROAD: return 1.0f;
            ...
        }
    }
    

    那么,实际上是否可以在c ++ 14 / c ++ 17的constexpr函数中进行切换?

    是。

    而且,如果可能的话,那是什么语法?

    语法绝对没有特别之处,它只是一个正常的switch 。 喜欢这个:

    constexpr int fun (int i) {
        switch(i) {
            case 0: return 7;
            default: return 5;
        }
    }
    
    int main () {
        int arr[fun(3)];
    }
    
    链接地址: http://www.djcxy.com/p/68369.html

    上一篇: Switch in constexpr function

    下一篇: time or runtime detection within a constexpr function