- ベストアンサー
using namespace std;//?
nubou C++で using namespace std; という宣言が使えるということなのですが ・namespaceとはなんでしょうか? ・stdとはなんでしょうか? ・このような宣言が必要な場面はどのようなときなのでしょうか? いずれかひとつでも結構です (質問に間違いがありましたので修正しました) よろしくお願いします
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> これからは<iostream.h>を使うのは良くないことで 良くないというか、時代遅れになりつつあります。 > <iostream>を使うのが正式となるのでしょうか? yes
その他の回答 (3)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
Borland C++ 5.5 なら問題ないはずなんだけど... #include <iostream> int main() { std::cout << "Hello, world" << std::endl; return 0; } これ、コンパイル/実行できませんか?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
>(A)using std::string >... > ということですが私は(A)の宣言をしないで > cout << "Hellow, world! << endl; > と書いたりしています > これはいけないことなのでしょうか? コンパイラは何をお使いでしょうか? 処理系によっては旧いコードが通ります。 あるいは <iostream> ではなく、旧い <iostream.h> を #include していませんか? もしくは コードのどこかで using namespace std; していませんか? > またSTLはstdに空間内にあるのでしょうか? yes
補足
コンパイラは何をお使いでしょうか?: Borland C++ ver.5.5(フリー)です 処理系によっては旧いコードが通ります。: Borland C++ ver.5.5(フリー)は古いのでしょうか? 今度のver.6も古いのでしょうか? Builderだとokなのでしょうか? だとするとマイクロソフトよりもいいものを出してきたのに残念ですね あるいは <iostream> ではなく、旧い <iostream.h> を #include していませんか? <iostream.h>です 最初は<iostream>をインクルードしてみたのですがエラーになりました (他に何か悪い事をしていたのかもしれません) もしくは コードのどこかで using namespace std; していませんか? これはしていません コンパイラに怒られるまではするつもりはないのです よろしくお願いします
- Nandayer
- ベストアンサー率47% (20/42)
とりあえず以下のように回答いたします。わからないところがありましたら、補足などで再質問してください。 【 namespace とは?】 プログラム要素(関数,クラス,・・・)をパッケージ化するためのメカニズムです。日本語には「名前空間」と訳されています。 例えば、名前としてこの OKWeb /教えて! goo のカテゴリーを参考にすると、次のようになります。 namespace education { class economy; void literature(); } namespace society { class economy; double energy (); } すると、名前は上から順に、 education::economy education::literature society::economy society::energy になります。 効用としては、名前の衝突が避けられます。たとえば、 education::economy society::economy は全く別のものてす。 【 std とは?】 C++ 標準ライブラリ用の名前空間名です。 例えば、文字列を扱うクラスは、std::string, 標準出力ストリーム(ここに出力の操作をすると、標準出力装置に出力される)は std::cout という名前です。 【 using とは?】 名前空間を使うと、正式な名前は長くなり、プログラムの読みやすさを損なうことがあります。これを避けるために、using 宣言と using ディレクティブがあります。 using 宣言をすると、それ以後そのスコープでは名前空間名を省略することができます。例えば、using 宣言がなければ、 std::string str; std::cout << "Hellow, world! << std::endl; と書かなければ、標準準拠のコンパイラではエラーになりますが、( endl を実行すると、改行してフラッシュする) (A)using std::string (A)using std::cout (A)using std::endl と宣言すると、std:: を省略して、 (B)string str; (B)cout << "Hellow, world! << endl; と使えるようになります。 using ディレクティブを使うと、その名前空間のプログラム要素は、全て名前空間名を省略することができるようになります。例えば、 using namespace std; と宣言すると、いちいち(A)を全て書かなくても(B)が書ける(コンパイル・エラーにならない)ようになります。 using ディレクティブを使うと名前が衝突する可能性が増えるので、新たにコーディングする場合は使うべきではないそうです。名前空間がなかった昔の C++ のソースを標準準拠のコンパイラにかけるときなどに、限定して使うことが推奨されています。 以上の説明は、概略のものです。特に、名前空間名をいつ省略できるか、省略した場合どのように解釈されるかについては注意が必要です。
補足
(A)using std::string (A)using std::cout (A)using std::endl と宣言すると (B)string str; (B)cout << "Hellow, world! << endl; と使えるようになります。 ということですが私は(A)の宣言をしないで cout << "Hellow, world! << endl; と書いたりしています これはいけないことなのでしょうか? またSTLはstdに空間内にあるのでしょうか? よろしくお願いします
お礼
動きました <iostream> は使えるようです おっしゃる通りです 省略名にすると <iostream> で確かにとするとエラーがでます しかし <iostream.h> とするとエラーがでません これからは<iostream.h>を使うのは良くないことで <iostream>を使うのが正式となるのでしょうか? よろしくお願いします