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

Sha*_*awk 2 c c++ string scalar

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

编辑:如果答案/解释从C到C++不同,我想解释包括两种语言.我正在为这个问题添加C++标签.

fre*_*low 7

char*并且const char*是标量类型,而char[n]const char[n]没有.

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


jap*_*iss 5

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

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