C++ 用于定义变量的自动类型
我试着用自动类型来定义变量 我用两种方法声明了一个数组 一,。使用自动 自动a={10,30,20,40} 二,。使用int int b[]={10,30,20,40} 然后我编写了以下代码: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
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