为什么const数组无法从constexpr函数访问?

时间:2013-09-18 17:17:04

标签: c++ c++11 constexpr

我有一个名为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

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

1 个答案:

答案 0 :(得分:8)

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

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

如果没有这个,表达式bar[0]执行左值到右值的转换以取消引用数组。根据C ++ 11 5.19 / 2,第九个子弹:

,这使得它不再是一个常量表达式,除非数组是constexpr
  除非将

应用于

,否则

左值到右值的转换      

      
  • 文字类型的glvalue,引用constexpr
  • 定义的非易失性对象   

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