一些网站声称字符串类型是标量。据我了解,标量是单值类型,而不是数组类型。但是字符串本质上不是一个字符串吗?那为什么它会成为一个标量?
编辑:如果答案/解释因C到C ++而异,我想解释一下是否包含这两种语言。我正在为这个问题添加C ++标签。
答案 0 :(得分:7)
char*
和const char*
是标量类型,而char[n]
和const char[n]
则不是。
算术类型,枚举类型,指针类型,指向成员类型的指针,
std::nullptr_t
和这些类型的cv限定版本统称为标量类型。 (3.9类型[basic.types]§9)
答案 1 :(得分:4)
标量和聚合类型之间的区别是模糊的。 32位整数也是32位的容器。尽管字符串在技术上是字符的集合,但我们经常操纵它们,就像我们操纵标量一样。我们将它们视为不可变的,比较它们,将它们作为参数传递等等。在C中,字符串的聚合性质更加明显,但包括C ++在内的许多其他语言使它们感觉像是标量。
模糊性的其他示例是复数和3D矢量。它们实际上由几个doubles
组成,但是数字程序仍然在堆栈上分配它们,按值传递它们,在它们上面重载标量运算符,等等。
答案 2 :(得分:0)
通常,所有基本原始数据类型都被视为标量。
但是,因为C ++有一个STL是语言的一部分,所以可以将字符串(不是char数组)视为标量类型。
在C中,没有这样的字符串原语(因为C中字符串的定义本质上是一个标量字符类型的数组)所以这一切都取决于你如何看待它。
答案 3 :(得分:0)
在C中,字符串是数据格式而不是类型。 C字符串的类型为N+1
char
,其中N
是字符串的长度。数组类型不是标量类型的一部分,而是聚合类型的一部分。
C ++也有一个string
类型,它是类类型但不属于标量类型。