web-dev-qa-db-ja.com

C ++-文字列は組み込みのデータ型ですか?

C++stringは組み込みデータ型ですか?

ありがとう。

18
Simplicity

使用したいbuilt-inの定義は何ですか? built-inお持ちのコンパイラツールセットyesである必要があります。コンパイラによって特別に扱われますか? no、コンパイラーはそのタイプをユーザー定義タイプとして扱います。同じことがおそらくほとんどの人がyesと答える他の多くの言語にも適用できることに注意してください。

C++委員会の焦点の1つは、コア言語を最小限に抑え、ライブラリでできるだけ多くの機能を提供することです。これには2つの意図があります。コア言語がより安定していること、ライブラリを再実装、拡張できること...コンパイラコアを変更せずに。しかし、さらに重要なことに、ほとんどの標準ライブラリを処理するために特別なコンパイラサポートが必要ないという事実は、コア言語がほとんどの用途で十分に表現力があることを保証します。

Simplerは否定された形で言いました。言語がstd::stringを実装するために特別なコンパイラサポートを必要とする場合、それはユーザーがコア言語でそのまたは類似の概念を表現するのに十分な能力を持っていないことを意味します。

これはプリミティブではありません。つまり、intcharなどのように「ビルトイン」されていません。最も近い組み込みの文字列のような型はchar *またはchar[]です。これは、Cで文字列を処理する古い方法ですが、生産的に使用するためには、一連のライブラリコードが必要です。

むしろ、std::stringは、現在のほとんどすべての最新のC++コンパイラに付属する標準ライブラリの一部です。それを使用するには、#include <string>(またはそれを含む何かを含める必要がありますが、実際にはコードが参照するものを含める必要があります)が必要です。

9
cHao

Std :: stringについて話しているなら、いいえ。

文字配列といえば、組み込み型の配列として扱えると思います。

7
BЈовић

番号。

組み込み型または「プリミティブ」型を使用して、組み込み型charで文字列ライフ機能を作成できます。これは、ユーティリティ関数とともにCで使用されていたものです。C++では、この機能がまだありますが、文字列を使用するより直感的な方法が追加されました。

stringクラスはstd名前空間の一部であり、basic_stringテンプレートクラスのインスタンス化です。次のように定義されます

typedef basic_string<char> string;

これは、必要に応じて動的にサイズ変更する機能を備えたクラスであり、ユーティリティとして機能する多くのメンバー関数を持っています。また、演算子のオーバーロードを使用するため、より直感的に使用できます。ただし、この機能は、速度の点でオーバーヘッドがあることも意味します。

3
flight

組み込みの意味に依存しますが、おそらくそうではありません。 std::stringは標準ライブラリ(したがってC++標準)によって定義されており、さまざまなコンパイラで非常に広くサポートされていますが、intcharのようなコア言語の一部ではありません。

3
jho

can組み込みにすることはできますが、組み込む必要はありません。

C++標準ライブラリには、そのコンポーネントのドキュメント化されたインターフェイスがあります。これは、ライブラリコードまたはコンパイラの組み込みとして実現できます。標準はそれがどのように実装されるべきかについては述べていません。

#include <string>を使用すると、std :: string実装を利用できます。これは、コンパイラが直接実装しているためか、一部のライブラリコードにリンクしているためです。各コンパイラをチェックしない限り、私たちは確実にはわかりません。

既知のコンパイラは、組み込み型にする必要がないため、組み込み型にすることを選択していません。純粋なライブラリ実装のパフォーマンスは明らかに十分に優れていました。

1
Bo Persson

絶対にありません。文字列は、標準ライブラリのクラスです。 char *、またはchar []は組み込み型ですが、char、int、float、double、void、bool(ポインタ、配列、符号またはサイズ修飾子-符号なし、長いなど)は基本的なタイプです。

0
kill3rreaper

いいえ、それは標準ライブラリの一部です。

0
Kylo