jal*_*alf 14
是的,不是.大多数情况下,数组在两种语言中的工作方式相同(C99支持可变长度数组,而C++则不支持,并且可能还有一些其他微妙的差异).
但是,你所说的也不完全正确.编译器不会将数组访问视为指针,即使在C中也是如此.在某些情况下,数组访问可能更有效,因为编译器在数组情况下有更好的别名信息.在C和C++中,普通指针访问意味着编译器必须假定它可以为任何其他兼容类型添加别名.如果编译器只是将其视为指针取消引用,则此优化机会将丢失.
编辑
正如评论中所指出的,语言标准确实根据指针算术/解除引用来定义数组下标.当然,实际的编译器使用的附加信息的指针实际上是一个数组,所以他们不及时治疗究竟喜欢三分球,但可以考虑超出了标准规定的最优化.
与C99不完全相同.C99支持可变长度数组(VLA),但C++不支持.
void f(int n)
{
int array[n]; //valid C99, but invalid C++
}
Run Code Online (Sandbox Code Playgroud)
这意味着,C++编译器不会像C(即C99)编译器那样处理数组.
但是,其他版本的C(即C89)不支持VLA.所以C89数组与C++数组几乎相同.