我有一个名为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
为什么我无法从访问中访问其中一个元素?或者更好,我怎么做,如果有可能的话?
答案 0 :(得分:8)
需要声明数组constexpr
,而不仅仅是const
。
constexpr char const* bar[10]={"bar"};
如果没有这个,表达式bar[0]
执行左值到右值的转换以取消引用数组。根据C ++ 11 5.19 / 2,第九个子弹:
constexpr
。
除非将应用于,否则左值到右值的转换
- 文字类型的glvalue,引用constexpr
定义的非易失性对象
(以及其他一些不适用的例外情况。)