いくつかのWebサイトは、文字列型がスカラーであると主張しています。私が理解しているように、スカラーは配列型ではなく単一値型です。しかし、文字列は本質的に文字の配列ではありませんか?では、なぜそれがスカラーになるのでしょうか?
編集:答え/説明がCとC ++で異なる場合は、両方の言語を含む説明が必要です。この質問にC++タグを追加しています。
char*
とconst char*
はスカラー型ですが、char[n]
とはそうでconst char[n]
はありません。
算術型、列挙型、ポインター型、メンバー型へのポインター
std::nullptr_t
、、およびこれらの型のcv修飾バージョンは、まとめてスカラー型と呼ばれます。(3.9タイプ[basic.types]§9)
スカラー型と集計型の違いはあいまいです。32ビット整数も32ビットのコンテナです。文字列は技術的には文字の集合体ですが、スカラーを操作するのと同じように文字を操作することがよくあります。それらを不変として扱い、比較し、引数として渡すなど。Cでは、文字列の集合的な性質がより明確になりますが、C++を含む他の多くの言語ではスカラーのように感じられます。
あいまいさの他の例は、複素数と3Dベクトルです。それらは実際にはいくつかdoubles
で構成されていますが、数値プログラムはそれらをスタックに割り当て、値で渡し、スカラー演算子をオーバーロードするなどです。
一般に、すべての基本的なプリミティブデータ型はスカラーと見なされます。
ただし、C ++には言語の一部であるSTLがあるため、文字列(char配列ではない)をスカラー型と見なすことができます。
Cでは、そのような文字列プリミティブはありません(Cでの文字列の定義は、本質的にスカラーchar型の配列であるため)。したがって、それはすべて、それをどのように見ているかによって異なります。
Cでは、文字列はデータ形式であり、型ではありません。AC文字列は、文字列の長さであるN+1
配列 char
型です。N
配列型はスカラー型の一部ではなく、集計型の一部です。
C ++にstring
は、クラス型であるがスカラー型の一部ではない型もあります。