【发布时间】:2017-06-23 12:41:24
【问题描述】:
如果我想使用像make_array 这样的方便的东西,我没有机会先声明我的数组,然后在“早期”时间进行定义,因为我的 var 的类型在定义之前不可用。
所以我找到了这个答案:
Undefined reference to static constexpr char[]
在下面的示例中,我编写了这个解决方案,它可以用 gcc 很好地编译,我不确定这是否真的是有效的 c++ 代码,因为它或多或少是一个带有定义的声明,后来是一个没有任何内容的定义。这是允许的吗? (编译好并不能保证代码是有效的c++)
#include <experimental/array>
#include <iostream>
class Foo
{
private:
static decltype(auto) constexpr Bar =
std::experimental::make_array(
std::experimental::make_array( 1,2,3 ),
std::experimental::make_array( 4,5,6 )
);
public:
using ARR_TYPE = decltype( Bar );
static auto& GetArr( int idx )
{
// range check ...
return Bar[idx];
}
};
constexpr Foo::ARR_TYPE Foo::Bar;
int main()
{
for ( auto el: Foo::GetArr(0))
{
std::cout << el << std::endl;
}
}
【问题讨论】:
标签: c++ static language-lawyer constexpr