2012-04-18 14 views
2

いくつかのウェブサイトでは、文字列型がスカラーであると主張しています。私が理解しているように、スカラーは配列型ではなく、単一値型です。しかし、文字列は本質的に文字の配列ではありませんか?だから、なぜそれがスカラーだろうか?文字列型はスカラーですか、もしそうならば?

EDIT:答え/説明がCと異なる場合は、両方の言語を説明するように説明したいと思います。私はこの質問にC++タグを追加しています。

+6

参考にしてください。技術的には、Cは*文字列型を持っていません。 – Jon

答えて

5

char*およびconst char*はスカラー型であり、char[n]およびconst char[n]はスカラー型ではありません。

算術型、列挙型、ポインタ型、メンバー型へのポインタ、std::nullptr_t、そしてこれらのタイプのCV修飾バージョンを一括スカラー型呼ばれます。 (3.9型[基本型]§9)

0

一般に、すべての基本プリミティブデータ型はスカラーとみなされます。

しかし、C++には言語の一部であるSTLがあるため、文字列(char配列ではない)をスカラー型と見なすことができます。

Cでは、文字列プリミティブはありません(Cの文字列の定義は本質的にスカラーchar型の配列なので、すべてがどのように見ているかによって異なります)。

+0

「スカラー型」という概念は、C++に特有のものです。私の編集を参照してください。 – fredoverflow

0

Cでは、文字列はデータ型であり、型ではありません。 Cの文字列の型は配列N+1charです。ここで、Nは文字列の長さです。配列型はスカラ型の一部ではなく、集約型の一部です。

C++には、クラス型でスカラー型の一部ではないstring型もあります。

3

スカラー型と集約型の区別はあいまいです。 32ビット整数も32ビットのコンテナです。文字列は技術的に文字の集まりですが、スカラを操作するときに文字列を操作することがよくあります。私たちはそれらを不変として扱い、それらを比較したり、引数として渡したりします。Cでは文字列の集約的性質がより明白ですが、C++を含む他の多くの言語ではスカラーのように感じます。

ぼかしの他の例は、複素数と3Dベクトルです。それらは実際には複数のdoublesで構成されていますが、数値プログラムはそれらをスタックに割り当て、値渡し、スカラー演算子のオーバーロードなどを行います。

関連する問題