Ben*_*igt 28
因为它std::array<T, N>
是一个聚合,所以constexpr
只有当底层类型T
有一个constexpr
构造函数时(当你提供的每个初始化程序都显示时),它可以初始化为if .
基于@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()
{
}
Run Code Online (Sandbox Code Playgroud)
我相信我在这里找到了标准的相关引用:
12.1构造函数[class.ctor]
6默认构造函数是默认的,未定义为已删除的默认构造函数是在产生其类类型(1.8)的对象(或者在第一次声明后明确默认)的情况下(3.2)进行隐式定义的.隐式定义的默认构造函数执行类的初始化集合,该初始化集合将由用户编写的该类的默认构造函数执行,没有ctor-initializer(12.6.2)和空的复合语句.如果该用户编写的默认构造函数不正确,则程序格式错误.如果该用户编写的默认构造函数满足constexpr构造函数(7.1.5)的要求,则隐式定义的默认构造函数为constexpr.
这看起来基本上像@ BenVoigt的答案.
归档时间: |
|
查看次数: |
13203 次 |
最近记录: |