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