4

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

編集:答え/説明がCとC ++で異なる場合は、両方の言語を含む説明が必要です。この質問にC++タグを追加しています。

4

4 に答える 4

7

char*const char*はスカラー型ですが、char[n]とはそうでconst char[n]はありません。

算術型、列挙型、ポインター型、メンバー型へのポインターstd::nullptr_t、、およびこれらの型のcv修飾バージョンは、まとめてスカラー型と呼ばれます。(3.9タイプ[basic.types]§9)

于 2012-04-18T15:05:20.730 に答える
5

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

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

于 2012-04-18T15:27:19.160 に答える
0

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

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

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

于 2012-04-18T15:12:46.500 に答える
0

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

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

于 2012-04-18T15:13:11.043 に答える