cinとstdの違いは何ですか:: cin?


ベストアンサー

stdは名前空間です。名前空間がC ++ STD90に追加されました。古いバージョンのC ++では、名前空間がなかったため、coutを使用し、最新のC ++ではstd :: coutを使用します。

完全を期すために、自分がusing namespace std;であると宣言した場合、cout std::coutを意味します。 。

ただし、これは推奨される方法ではないため、完全修飾std :: coutnameを優先して回避する必要があります。

TL; DR;名前空間は、大規模なプロジェクトでの名前の競合を防ぎます。 stdは、C ++の標準ライブラリの名前空間です。

説明:名前が示すとおり、名前空間は一意の名前の範囲を制限するために使用され、同じ名前の2つのエンティティを持つ可能性を減らします。すべての言語がそれを必要とし、何らかの方法でそれを提供します。たとえば、Javaではパッケージと呼ばれています。

100〜500行などの小さなプログラムでは、すべての名前が一意であることを確認するための*言語機能*を使用するのはやり過ぎのようです。しかし、名前の衝突は、よりわかりやすい方法で発生する可能性があります。 XYZという名前のクラスを持つライブラリを作成し、別の友人が偶然にも同じクラス名XYZを持つ別のライブラリを作成した場合。 (クラスは異なる目的または同じ目的で役立つ場合がありますが、それは問題ではありません。)私たちの側では問題はありません。ここで、ソフトウェアを開発していて、両方のライブラリを使用しているとします。これで、プロジェクトにはXYZクラスの2つの定義があります。それは単にビルドを壊し、おそらく2つのクラスのいずれも使用しない/必要ない場合でも、同じ名前で定義されているという理由だけで、これら2つのライブラリを使用してコードをビルドすることは不可能です。

名前空間はこの問題を解決します。私とあなたの友人は、私たちのライブラリに対して異なる名前空間を持っています。 (名前空間はグローバルに一意である必要があるため、多くの場合、開発者の会社名IDも含まれているため、ライブラリを作成している他の開発者は、ライブラリに同じ名前空間を選択しません)

例はJavaのListクラスです。 2つのリストがあります。 1つは、データ構造リストのインターフェースです。その他は、GUIリストコンポーネントリストです。プログラムで両方を使用できます。その場合は、完全修飾名(java.util.Listまたはjava.awt.List)で参照します。パッケージを使用すると、同じ名前を使用できます。そうしないと、両方を追加しようとすると、コンパイラは必要なリストを認識できず、あいまいさ(1つのステートメントの2つの等しく控除可能な意味を持つ)のためにエラーをアナウンスします。

stdはC ++標準ライブラリに選択された名前です。

つまり、標準ライブラリのすべてがstdの下にあり、コードではstd :: cout、std :: stringと呼ばれます。 、std :: map など。

これは、std名前空間に何も定義しないでください。また、ライブラリを作成するときは常に別の名前空間を作成して、汚染しないようにする必要があることも意味します。 std名前空間。

回答

古いコンパイラを使用している場合は、単に cin で問題なく動作します。

しかし最新のC ++では、すべての標準的なものが std 名前空間にラップされています。

名前空間は、名前空間間の名前の競合を回避するのに役立ちます。ライブラリまたはヘッダーファイル。

したがって、最新のコンパイルを使用している場合えーと、それを使用できる名前空間breforをインポートする必要があります。または、すべての構成をインポートせず、一部のみをインポートする場合は、 std :: cin または std :: cout。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です