C++ 什么是;“C型阵列”;平均值以及它与std::array(C+;+;样式)有何不同?

C++ 什么是;“C型阵列”;平均值以及它与std::array(C+;+;样式)有何不同?,c++,c,C++,C,我在阅读时遇到了这个问题。C样式的数组只是一个“裸”数组-也就是说,一个没有封装在类中的数组,如下所示: char[] array = {'a', 'b', 'c', '\0'}; 或指针(如果将其用作数组): Thing* t = new Thing[size]; t[someindex].dosomething(); 而“C++风格的数组”(非官方但流行的术语)正是您所提到的——一个包装类,如std::vector(或std::array)。这只是一个包装类(下面是一个C风格的数组),它

我在阅读时遇到了这个问题。

C样式的数组只是一个“裸”数组-也就是说,一个没有封装在类中的数组,如下所示:

char[] array = {'a', 'b', 'c', '\0'};
或指针(如果将其用作数组):

Thing* t = new Thing[size];
t[someindex].dosomething();

而“C++风格的数组”(非官方但流行的术语)正是您所提到的——一个包装类,如
std::vector
(或
std::array
)。这只是一个包装类(下面是一个C风格的数组),它提供了诸如边界检查和大小信息之类的方便功能。

通常认为STD::向量作为C++数组而不是STD::array@Keith不是严格的定义,但你可以把它当作一个效果几乎相同的东西来使用。@Seth:也许,但是,数组实际上只是指针这一常见的误解导致了很多问题。也许更清楚地说,数组对象不是指针对象。(数组表达式通常(但不总是)会衰减为指针表达式。)@Keith是的,你是对的。如果你认为这种差异对这个提问者来说足够重要,那么我会在我的回答中加上一条说明。我的目的是向他展示项目是如何在一个通常被称为数组的结构中分组的,因为每当你试图用数组做任何事情时,它都会变成一个指针,我想它也会放在那里。我会补充一点,向量不是一个数组,而且在最严格的意义上,它并不是真正的C++风格数组,但我认为每个人都知道我没有对这个术语给出迂腐的定义。@塞思:例如,你可以用一个看起来完全相同的声明来拥有一个变量和一个参数(<代码> int ARR(42);< /C> >)但是,将
sizeof
应用于变量可以得到数组大小,而将
sizeof
应用于参数可以得到指针大小。通过将数组参数声明解释为指针声明,并将大多数数组表达式转换为指针类型,该语言花费了大量精力使数组和指针看起来是可互换的。这意味着你可以在大多数情况下把它们混为一谈,然后某个角落的案子会咬到你。