2012-04-18 30 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組成,但數字程序仍然將它們分配到堆棧上,按值傳遞它們,在它們上重載標量操作符,等等。

相關問題