C++ C++;类内静态常量数组初始化
我想创建一个常量和静态整数数组作为公共类变量。 定义它并立即初始化它是很简单的。请参阅下面的代码以了解完整示例C++ C++;类内静态常量数组初始化,c++,c++11,C++,C++11,我想创建一个常量和静态整数数组作为公共类变量。 定义它并立即初始化它是很简单的。请参阅下面的代码以了解完整示例 #include <iostream> class Foo { public: constexpr static int arr[3][2] = { {1, 2}, {3, 4}, {5, 6} }; }; int main() { for (int i = 0; i <
#include <iostream>
class Foo {
public:
constexpr static int arr[3][2] = {
{1, 2},
{3, 4},
{5, 6}
};
};
int main() {
for (int i = 0; i < 3; i++) {
std::cout << "Pair " << Foo::arr[i][0] << ", " << Foo::arr[i][1] << std::endl;
}
return 0;
}
这不是C++中的可能吗?更可能的是,我忽略了C++的部分内容及其静态变量初始化策略。
< P>编译器错误是由于<代码> C++ 11 标准> < /P> 使用C++17
标准,通过使用
g++ --std=c++17 test.cpp
不会产生错误
编辑:这个解决方案适用于C++17
,而不是像我原来的问题那样适用于C++11
。有关C++11
解决方案,请参阅已接受的答案。在C++17之前(因此C++11和C++14)必须添加
constexpr int Foo::arr[3][2];
在类的主体之外。clang运行它gcc不存在有一个向上投票和concider添加[language Layer]后续gcc使用
-std=c++17运行它
gcc使用-std=c++17接受它。IIRC,此类静态类数据成员的内联定义随C++14或C++17一起提供。其他编译器可能在早些时候将其合并为一个扩展。尽管我对你的问题发表了评论,但C++11标准似乎确实支持这一点。这表明constexpr static int-arr[]={1,2,3}代码>(在结构中
)自C++11起“正常”。@AdrianMole自C++11起“正常”,但根据max66的回答,还需要一个类外定义。在C++11之前constepr
不是一个关键字问题被标记为C++11,因此此解决方案不是applicable@AdrianMole真的。。。但这也许是OP编辑问题的合适地点,以澄清他们对使用更高版本的语言持开放态度。这也是一个解决方案。然而,这不是一个非常简洁的方法。@Talos在C++17之前,这是静态成员变量的标准方法。对于C++11,您有更好的想法吗?@M.M在一次初始化中初始化类体内的常量静态数组line@Talos在C++之前,还需要类外定义。17@Talos,类内定义仅适用于C++11中的整数值。Gcc就在这里拒绝了C++11的代码。没有在家里用“真实”的叮当声检查,但我猜在GodBolt上,一些链接简化可能会持续,迫使数组在那里有内部链接。
constexpr int Foo::arr[3][2];