数组是否与 C 相同C++
Are arrays in C++ same as C?
C++编译器处理数组的方式是否与在 C 中相同?
例如
在 C 中,
- 使用下标的数组访问运算符始终被解释为指针。
- 在函数参数中,数组声明被视为指向的指针元素的开头。
是和否。在大多数情况下,数组在两种语言中的工作方式相同(C99 支持可变长度数组,而 C++ 不支持,并且可能还有其他一些细微的差异)。
但是,您所说的也不完全正确。编译器不会将数组访问视为指针,即使在 C 中也是如此。在某些情况下,数组访问可能更有效,因为编译器在数组大小写中具有有关别名的更好信息。在 C 和 C++ 中,纯指针访问意味着编译器必须假定它可以别名任何其他兼容类型。如果编译器只是将其视为指针取消引用,那么将失去此优化机会。
编辑
正如评论中指出的,语言标准确实根据指针算术/取消引用定义了数组下标。当然,实际的编译器利用了指针实际上是一个数组的附加信息,因此它们并不完全被视为指针,但这可以被视为超出标准要求的优化。
与 C99 不完全相同。C99 支持可变长度数组 (VLA),但C++不支持。
void f(int n)
{
int array[n]; //valid C99, but invalid C++
}
这意味着,C++编译器不会像 C(即 C99)编译器那样对待数组。
但是,其他版本的C(即C89)不支持VLA。因此,C89 数组将与C++数组 [几乎] 相同。
是的,它们的处理方式相同。但是,在C++您可能不应该使用它们 - 调查std::vector
类!
是的。数组在 C 和 C++ 中的处理方式相同。但是,C++现在有了STL
,它是数据结构和对它们的操作的集合,例如字符串、向量、deque 等。
是的,除了有趣和吸引人的OOP功能之外,C++是C语言的扩展版本。斯特罗斯图普和其他人设计它的唯一目的是创建一个具有类似C语法的面向对象语言。基本上,两者在大多数情况下是相同的(不包括C++的 OOP 功能),数组也不例外。
"数组基本上是指向顺序内存块的指针。其中数组的名称表示该块的第一个位置。此语句适用于 C 和 C++。
数组实现是相同的C++尽管编译器允许您使用它们的方式存在一些限制。
- std::具有相同基类的类的变体
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 不断收到相同的错误...怎么了?C++
- 具有最大子序列大小的序列,每个元素都相同
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- c++类声明时,相同的例程,不同的成员变量类型
- 不同语言中相同代码的不同行为
- 如何检查一个c++字符串中有多少相同的字符/数字
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- c++找不到具有相同哈希的无序集合元素
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 检查函数返回类型是否与STL容器类型值相同
- 从类型std::函数传递变量失败,尽管调用方期望的类型完全相同
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 通过交换元素使数组相同
- 使用 boost 进行标记化会给出相同的输出
- 运行相同函数名称C++的多个类的列表