C++ 用于定义变量的自动类型

C++ 用于定义变量的自动类型,c++,c++11,C++,C++11,我试着用自动类型来定义变量 我用两种方法声明了一个数组 一,。使用自动 自动a={10,30,20,40} 二,。使用int int b[]={10,30,20,40} 然后我编写了以下代码: cout<<sizeof(a)/sizeof(int)<<" "<<sizeof(b)/sizeof(int) OUTPUT: 2 4 为什么这两种情况下的输出不同,尽管这两种语句的含义相同 我用两种方法声明了一个数组 不,你没有。您声明了一个std::initial

我试着用自动类型来定义变量

我用两种方法声明了一个数组

一,。使用自动

自动a={10,30,20,40}

二,。使用int

int b[]={10,30,20,40}

然后我编写了以下代码:

cout<<sizeof(a)/sizeof(int)<<" "<<sizeof(b)/sizeof(int)
OUTPUT: 2 4
为什么这两种情况下的输出不同,尽管这两种语句的含义相同

我用两种方法声明了一个数组

不,你没有。您声明了一个std::initializer\u list a和一个int[4]b

为什么这两种情况下的输出不同,尽管这两种语句的含义相同

它们的意思不一样

我用两种方法声明了一个数组

不,你没有。您声明了一个std::initializer\u list a和一个int[4]b

为什么这两种情况下的输出不同,尽管这两种语句的含义相同

它们并不意味着相同的事情。规则是,当一个自动变量,即一个由auto声明的变量,用括号内的初始值设定项(例如,{10,20,30,40})初始化时,在您的例子中,派生的类型是std::initializer\u list类型的实例化。在您的情况下,它将是std::initializer\u list

此外,不要忘记sizeof操作符返回编译时对象的大小(字节),这对于std::initializer\u列表来说是常量。这意味着,如果std::initializer_list的实现对第一个和最后一个元素使用两个指针,那么在它上调用sizeof将返回两个指针8的大小

要获得正确的大小,应使用std::initializer\u list的size方法:

规则是,当一个自动变量(即由auto声明的变量)用括号内的初始值设定项(例如{10,20,30,40})初始化时,在您的情况下,推导的类型是std::initializer_list类型的实例化。在您的情况下,它将是std::initializer\u list

此外,不要忘记sizeof操作符返回编译时对象的大小(字节),这对于std::initializer\u列表来说是常量。这意味着,如果std::initializer_list的实现对第一个和最后一个元素使用两个指针,那么在它上调用sizeof将返回两个指针8的大小

要获得正确的大小,应使用std::initializer\u list的size方法:


c在哪里声明?@奇怪的角落对不起,我犯了一个错误,现在已经更正了。谢谢你@Gupta的更正。c在哪里声明?奇怪的角落抱歉我犯了一个错误,现在已经更正了。谢谢你@Gupta的纠正。
   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