C++ 在C++;在Xcode下
这两种声明之间有什么区别C++ 在C++;在Xcode下,c++,arrays,declaration,C++,Arrays,Declaration,这两种声明之间有什么区别 int myints[5]; array<int,5> myints; int myints[5]; 数组myints; 如果使用第一个声明和函数size(),将出现错误“成员引用基类型'int[5]'不是结构或联合”。 但是如果我使用第二个声明和函数size(),程序就会工作。 为什么最初的声明不起作用 #include <iostream> #include <iomanip> #include <array>
int myints[5];
array<int,5> myints;
int myints[5];
数组myints;
如果使用第一个声明和函数size(),将出现错误“成员引用基类型'int[5]'不是结构或联合”。
但是如果我使用第二个声明和函数size(),程序就会工作。
为什么最初的声明不起作用
#include <iostream>
#include <iomanip>
#include <array>
using namespace std;
int main()
{
//int myints[5]; //illegal
array<int,5> myints; //legal
cout << "size of myints: " << myints.size() << endl; //Error if I use the first declarations
cout << "sizeof(myints): " << sizeof(myints) << endl;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
//int myints[5];//非法
数组myints;//合法
cout数组myints
使用std::array
,这是一个模板,它将增强的功能覆盖在“基本”C/C++数组(这就是int myints[5]
的内容)之上。使用基本数组,您只需保留一块存储空间,并负责自己跟踪其大小(尽管您可以使用sizeof()
来帮助进行此操作)
使用std::array
可以获得帮助函数,使数组更安全、更易于使用。array myints
使用std::array
,该模板将增强的功能覆盖在“基本”C/C++数组之上(这就是int myints[5]
的功能)。对于基本阵列,您只需保留一块存储空间,并负责自己跟踪其大小(尽管您可以使用sizeof()
来帮助)
使用std::array
可以获得帮助函数,使数组更安全、更易于使用。array是一个模板类,它的成员函数是size(),而int[]是简单的C arrayarray是一个模板类,它的成员函数是size(),而int[]is simple C arraystd::array
在C++11中是新的。正如您所发现的,它有一个size
函数。它告诉您数组中有多少项。
另一方面,sizeof
告诉您一个变量占用了多少内存,即它的大小(以字节为单位)。std::array
在C++11中是新的。正如您所发现的,它有一个size
函数。它告诉您数组中有多少项。
另一方面,sizeof
告诉您一个变量占用了多少内存,即它的大小(以字节为单位)。通过使用int myints[5];
,您在堆栈上声明了一个包含5个int的数组,这是基本的C数组
相反,通过使用array myints;
可以声明类型为array
的对象,该对象是STL()定义的容器类,STL()反过来实现size()
函数来检索容器的大小
STL容器构建在“基本”C类型之上,以提供额外的功能并使其更易于管理。通过使用int-myints[5];
,您在堆栈上声明了一个包含5个int的数组,即基本C数组
相反,通过使用array myints;
可以声明类型为array
的对象,该对象是STL()定义的容器类,STL()反过来实现size()
函数来检索容器的大小
STL容器构建在“基本”C类型之上,以提供额外的功能并使其更易于管理。int myints[5];
没有函数size()
,但您可以这样做
int size = sizeof(myints)/ sizeof(int);
获取数组的大小
所以基本上你可以做到:
#include <iostream>
#include <iomanip>
#include <array>
using namespace std;
int main()
{
int myintsArr[5]; //legal
array<int,5> myints; //legal
cout << "size of myints: " << myints.size() << endl; //Error if I use the first declarations
cout << "sizeof(myintsArr): " << sizeof(myintsArr)/ sizeof(int) << endl;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
int myintsArr[5];//合法
数组myints;//合法
coutint myints[5];
没有函数size()
,但您可以这样做
int size = sizeof(myints)/ sizeof(int);
获取数组的大小
所以基本上你可以做到:
#include <iostream>
#include <iomanip>
#include <array>
using namespace std;
int main()
{
int myintsArr[5]; //legal
array<int,5> myints; //legal
cout << "size of myints: " << myints.size() << endl; //Error if I use the first declarations
cout << "sizeof(myintsArr): " << sizeof(myintsArr)/ sizeof(int) << endl;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
int myintsArr[5];//合法
数组myints;//合法
正如其他人所指出的,std::array
是一个添加的扩展
到C++11(所以您可能没有),它包装了一个C风格的数组,
为了给它一些(但不是全部)类似STL的接口。
其目标是,它可以在C风格数组的任何地方使用
可以;特别是,它接受相同的初始化语法
作为C样式数组,如果初始化类型允许静态
初始化时,其初始化也可以是静态的。(打开
另一方面,编译器无法从
初始值设定项列表的长度,它可以为较旧的
C样式数组。)
关于大小,任何有经验的程序员都会
工具箱中的大小函数,与
std::begin
和std::end
(它们是C++11扩展,和
在C++11标准化之前,每个人都在他们的工具箱中
例如:
template <typename T>
size_t
size( T const& c )
{
return c.size();
}
template <typename T, size_t n>
size_t
size( T (&a)[n] )
{
return n;
}
模板
尺寸
尺寸(T常数和c)
{
返回c.size();
}
模板
尺寸
尺寸(T&a)[n])
{
返回n;
}
(在现代C++中,第二个甚至可以是代码> CONTXPRPR < /代码>)< /P>
考虑到这一点,您可以编写
size(myInts)
,而不管
是一个std::array
或一个C样式的数组。正如其他人所指出的,std::array
是一个添加的扩展
到C++11(所以您可能没有),它包装了一个C风格的数组,
为了给它一些(但不是全部)类似STL的接口。
其目标是,它可以在C风格数组的任何地方使用
可以;特别是,它接受相同的初始化语法
作为C样式数组,如果初始化类型允许静态
初始化时,其初始化也可以是静态的。(打开
另一方面,编译器无法从
初始值设定项列表的长度,它可以为较旧的
C样式数组。)
关于大小,任何有经验的程序员都会
工具箱中的大小函数,与
std::begin
和std::end
(它们是C++11扩展,和
在C++11标准化之前,每个人都在他们的工具箱中
是的