![](/img/trans.png)
[英]Why a compiler doesn't deduce the template parameter in case of zero array?
[英]Why doesn't this deduce array size?
我想知道为什么这在结构或 class 中不起作用,但通常在结构或 class 之外声明时起作用。
enum options { OPTION1, OPTION2};
int main()
{
options opts[] = { OPTION1, OPTION2}; // WORKS
struct DOGG
{
//options opts[] = { OPTION1, OPTION2}; // DOESN'T WORK
options opts2[2] = { OPTION1, OPTION2}; // WORKS
};
}
为什么在class中不能推算出大小呢? 这对我来说似乎很奇怪,并且想了解为什么会这样。
数据成员可能以不同的方式初始化。 假设我们有:
struct DOGG
{
options opts[] = { OPTION1, OPTION2 }; // default member initializer
DOGG() {} // default member initializer applied
DOGG(int) : opts { OPTION1 } {} // member initializer list applied, default member initializer ignored
DOGG(long) : opts { OPTION1, OPTION1, OPTION1} {} // member initializer list applied, default member initializer ignored
};
那么opts
的大小应该是多少呢? 这是无效的,因为数组的大小必须在编译时已知。 所以数组的大小不会从默认成员初始化器(或成员初始化器列表)中推导出来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.