字符串类型是标量,如果是,为什么?

时间:2012-04-18 15:01:55

标签: c++ c string scalar

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

编辑:如果答案/解释因C到C ++而异,我想解释一下是否包含这两种语言。我正在为这个问题添加C ++标签。

4 个答案:

答案 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类型,它是类类型但不属于标量类型。