能标准::阵列中的constexpr类中使用?(Can std::array be used in

2019-07-18 02:10发布

我目前正在创建一个类constexpr构造函数,我不知道是否可以使用std::array来存储这个类的数据。 是否标准中明确指定一个std::arrayconstexpr构造和它的内容可以在编译时访问?

Answer 1:

因为std::array<T, N>是聚合,它可以被初始化为constexpr当且仅当基础类型T具有constexpr构造(当与每次提供初始化提交)。



Answer 2:

基于由@MarkGlisse评论:这个编译

#include <array> 
#include <iostream>

template<typename T, std::size_t N> 
struct X 
{ 
   constexpr X(const std::array<T,N>& a):arr(a){} 

   private: 
   std::array<T,N> arr; 
}; 

constexpr std::array<int,2> a {{ 13, 18 }}; 
constexpr X<int,2> x = a;

int main() 
{        
}

我相信我已经找到了从这里标准的相关报价:

12.1的构造[class.ctor]

6定义为已删除被默认一个默认的构造,而不是去网络连接隐含当odrused(3.2)来创建它的类型(1.8)或的目的定义德音响当其第一个声明之后被显式默认值。 的隐式去音响奈德默认的构造进行集将由用户编写的默认构造没有构造函数-初始化(12.6.2)和一个空的化合物语句该类来进行类的初始化的。 如果用户编写的默认构造函数会形成不良的,是形成不良的程序。 如果用户编写的默认构造函数将满足constexpr构造函数(7.1.5)的要求,隐德科幻奈德默认构造函数是constexpr。

这看起来基本上就像@ BenVoigt的答案。



文章来源: Can std::array be used in a constexpr class?