4

一些网站声称字符串类型是标量。据我了解,标量是单值类型,而不是数组类型。但是字符串本质上不是一个字符数组吗?那么为什么它会是一个标量呢?

编辑:如果答案/解释从 C 到 C++ 不同,我希望解释包括两种语言。我正在向这个问题添加 C++ 标记。

4

4 回答 4

7

char*andconst char*是标量类型,而char[n]andconst char[n]不是。

算术类型、枚举类型、指针类型、指向成员类型的指针std::nullptr_t以及这些类型的 cv 限定版本统称为标量类型。(3.9 类型 [basic.types] §9)

于 2012-04-18T15:05:20.730 回答
5

标量和聚合类型之间的区别是模糊的。32 位整数也是 32 位的容器。尽管字符串在技术上是字符的集合,但我们经常像操作标量一样操作它们。我们将它们视为不可变的,比较它们,将它们作为参数传递等。在 C 中,字符串的聚合性质更加明显,但包括 C++ 在内的许多其他语言使它们感觉像标量。

模糊性的其他示例是复数和 3D 矢量。它们实际上由几个 组成doubles,但数值程序仍然在堆栈上分配它们,按值传递它们,在它们上重载标量运算符等等。

于 2012-04-18T15:27:19.160 回答
0

在 C 中,字符串是一种数据格式,而不是一种类型。AC 字符串是数组类型N+1char其中N是字符串的长度。数组类型不是标量类型的一部分,而是聚合类型的一部分。

C++ 还有一种string类型,它属于类类型,但不属于标量类型。

于 2012-04-18T15:13:11.043 回答
0

通常,所有基本的原始数据类型都被视为标量。

但是,因为 C++ 有一个 STL,它是语言的一部分,所以您可以将字符串(不是 char 数组)视为标量类型。

在 C 中,没有这样的字符串原语(因为 C 中字符串的定义本质上是一个标量 char 类型的数组),所以这完全取决于您如何看待它。

于 2012-04-18T15:12:46.500 回答