我知道在C ++ 11中,我可以写
class foo {
static constexpr const char *one = "one";
}
但是,当我尝试为数组做同样的事情时
class bar {
static constexpr const float prim[4] = {2, 3, 5, 7};
}
(稍后引用)我收到undefined reference
链接器错误。
这对于数组是不可能的还是我在语法中遗漏了什么?
答案 0 :(得分:1)
静态constexpr数据成员声明不是C ++ 11/14中的定义,因此您无法使用prim
。
要解决此问题,请将以下语句放在cpp文件中的某个位置,就像处理任何其他非constexpr静态数据成员一样:
constexpr const float bar::prim[4];
换句话说,这会返回一个未定义的引用:
struct bar {
static constexpr const float prim[4] = {2, 3, 5, 7};
};
int main() {
auto *foo = bar::prim;
}
这不是:
struct bar {
static constexpr const float prim[4] = {2, 3, 5, 7};
};
constexpr const float bar::prim[4];
int main() {
auto *foo = bar::prim;
}
因为在第二种情况下,你实际上定义prim
而不是声明它,因此你可以获得它的地址,通过引用使用它,等等......