2012-04-18 26 views
2

一些网站声称字符串类型是一个标量。据我所知,标量是单值类型,而不是数组类型。但是,不是一个字符串本质上是一个字符数组?那么为什么它会是一个标量?字符串类型是一个标量,如果是这样,为什么?

编辑:如果答案/解释不同于C到C++,我想解释包括这两种语言。我将C++标签添加到这个问题中。

+6

请参考上下文吗?从技术上讲,C没有*字符串类型。 – Jon 2012-04-18 15:03:52

回答

5

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

运算类型,枚举类型,指针类型,指针成员类型,std::nullptr_t,以及这些类型的CV-合格版本统称标量类型。 (3.9类型[basic.types]§9)

0

通常,所有基本的基本数据类型都被认为是标量。

但是,由于C++具有属于该语言的STL,因此可以将字符串(不是char数组)作为标量类型。

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

+0

“标量类型”的概念非常特定于C++,请参阅我的编辑。 – fredoverflow 2012-04-18 15:54:34

0

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

C++也有一个类型为string的类型,但它不是标量类型的一部分。

3

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

其他模糊的例子是复数和3D矢量。它们实际上由若干个doubles组成,但数字程序仍然将它们分配到堆栈上,按值传递它们,在它们上重载标量操作符,等等。

相关问题