相关疑难解决方法(0)

带有 std::initializer_list 的奇怪行为 constexpr

我试图理解为什么编译器在这里抱怨:

// cexpr_test.cpp
#include <initializer_list>

constexpr int test_cexpr(std::initializer_list<const char*> x)
{
    return (int) (*x.begin())[0]; // ensuring the value isn't optimized out.
}

int main()
{
    constexpr int r1 = test_cexpr({ "why does this work," });

    constexpr std::initializer_list<const char*> broken { "but this doesn't?" };
    constexpr int r2 = test_cexpr(broken);

    return r1 + r2;
}
Run Code Online (Sandbox Code Playgroud)

编译时产生的消息

g++ -std=c++11 -Wall -Werror cexpr_test.cpp 
Run Code Online (Sandbox Code Playgroud)

如下:

cexpr_test.cpp:在函数“int main()”中:cexpr_test.cpp:12:76:错误:“const std::initializer_list{((const char* const*)(&)), 1}”不是常量表达式 12 | constexpr std::initializer_list 损坏 {“但这不是?” }; |

令人困惑的是,为什么它在没有任何问题的情况下构建第一个初始化列表。我在这里缺少什么?

c++ string-literals initializer-list language-lawyer constexpr

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