在Xcode下声明C ++中的int数组

时间:2013-08-15 08:41:29

标签: c++ arrays declaration

这两个声明之间有什么区别?

int myints[5];

array<int,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;
}

6 个答案:

答案 0 :(得分:3)

正如其他人所指出的那样,std::array是一个扩展名 到C ++ 11(所以你可能没有它),它包装了一个C风格的数组, 为了给它一些(但不是全部)类似STL的接口。 目标是它可以在任何C风格的数组中使用 可以;特别是,它接受相同的初始化语法 作为C样式数组,如果初始化类型允许静态 初始化时,它的初始化也可以是静态的。 (上 另一方面,编译器无法从中推断出它的大小 初始化列表的长度,它可以用于较旧的 C样式数组。)

关于尺寸,任何有经验的程序员都会有 工具箱中的大小函数,与...相同 std::beginstd::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;
}

(在现代C ++中,第二个甚至可能是constexpr。)

鉴于此,无论是否,都写size( myInts )std::array或C样式数组。

答案 1 :(得分:1)

array<int,5> myints使用std::array,这是一个模板,它覆盖了“基本”C / C ++数组(这是int myints[5])的增强功能。使用基本数组,您只需保留一大块存储空间,并自行负责跟踪其大小(尽管您可以使用sizeof()来帮助解决此问题。)

使用std::array,您可以获得帮助函数,使数组更安全,更易于使用。

答案 2 :(得分:1)

std::array是C ++ 11中的新功能。如您所见,它具有size功能。这会告诉您数组中有多少项。
另一方面,sizeof告诉你变量占用多少内存,即以字节为单位的大小。

答案 3 :(得分:0)

array是一个模板类,它的size()是它的成员函数,而int []是简单的C数组

答案 4 :(得分:0)

通过使用int myints[5];,您将在堆栈上声明一个包含5个int的数组,这是基本的C数组。

相反,通过使用array<int,5> myints;,您声明了一个array类型的对象,它是由STL(http://en.cppreference.com/w/cpp/container/array)定义的容器类,后者又实现{{1}用于检索容器大小的函数。

STL容器构建在“基本”C类型之上,以提供额外的功能并使其更易于管理。

答案 5 :(得分:0)

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;

}

并从两个数组中获得相同的结果