我正在尝试使用auto
类型来定义变量。
我用两种方法声明了一个数组
1.使用auto
auto a={10,30,20,40};
2.使用int
int b[]={10,30,20,40};
然后,我编写了以下代码:
cout<<sizeof(a)/sizeof(int)<<" "<<sizeof(b)/sizeof(int)
OUTPUT: 2 4
尽管两种陈述的含义相同,但为什么两种情况下的输出却不同。
规则是,当使用支撑式初始化程序(例如{10,20,30,40})初始化自动变量(即由auto声明的变量)时,推导的类型为type的实例化std::initializer_list<T>
。(您的情况将是std::initializer_list<int>
)。
此外,请不要忘记sizeof
运算符在编译时返回对象的大小(以字节为单位),这对于a而言是恒定的std::initializer_list
。这意味着,如果您的实现std::initializer_list
使用第一个和最后一个元素使用两个指针,则对其调用sizeof()
将返回两个指针的大小(在您的情况下为8)。
为了拥有合适的尺寸,您应该使用的size()
方法std::initializer_list
:
auto a = { 10,20,30,40,50,60,70,80 };
int b[] = { 10,30,20,40,50,60,70,80 };
std::cout << a.size() << " " << sizeof(b) / sizeof(int) << std::endl;
输出为:
8 8
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句