3

我有一个名为 access 的 constexpr 函数,我想访问数组中的一个元素:

char const*const foo="foo";
char const*const bar[10]={"bar"};

constexpr int access(char const* c) { return (foo == c); }     // this is working
constexpr int access(char const* c) { return (bar[0] == c); }  // this isn't
int access(char const* c) { return (bar[0] == c); }            // this is also working

我得到错误:

error: the value of 'al' is not usable in a constant expression

为什么我不能从访问中访问其中一个元素?或者更好的是,如果可能的话,我该怎么做?

4

1 回答 1

8

需要声明数组constexpr,而不仅仅是const.

constexpr char const* bar[10]={"bar"};

没有它,表达式将bar[0]执行左值到右值的转换以取消引用数组。constexpr根据 C++11 5.19/2,第九个项目符号,除非数组是 ,否则这会使其失去作为常量表达式的资格:

左值到右值的转换,除非它应用于

  • 一个字面量类型的左值,它引用一个用 constexpr 定义的非易失性对象

(以及其他一些不适用于此处的例外情况)。

于 2013-09-18T17:30:07.027 回答