• ベストアンサー

using namespace std;//?

nubou C++で using namespace std; という宣言が使えるということなのですが ・namespaceとはなんでしょうか? ・stdとはなんでしょうか? ・このような宣言が必要な場面はどのようなときなのでしょうか? いずれかひとつでも結構です (質問に間違いがありましたので修正しました) よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> これからは<iostream.h>を使うのは良くないことで 良くないというか、時代遅れになりつつあります。 > <iostream>を使うのが正式となるのでしょうか? yes

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

Borland C++ 5.5 なら問題ないはずなんだけど... #include <iostream> int main() { std::cout << "Hello, world" << std::endl; return 0; } これ、コンパイル/実行できませんか?

nubou
質問者

お礼

動きました <iostream> は使えるようです おっしゃる通りです 省略名にすると <iostream> で確かにとするとエラーがでます しかし <iostream.h> とするとエラーがでません これからは<iostream.h>を使うのは良くないことで <iostream>を使うのが正式となるのでしょうか? よろしくお願いします

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

>(A)using std::string >... > ということですが私は(A)の宣言をしないで > cout << "Hellow, world! << endl; > と書いたりしています > これはいけないことなのでしょうか? コンパイラは何をお使いでしょうか? 処理系によっては旧いコードが通ります。 あるいは <iostream> ではなく、旧い <iostream.h> を #include していませんか? もしくは コードのどこかで using namespace std; していませんか? > またSTLはstdに空間内にあるのでしょうか? yes

nubou
質問者

補足

コンパイラは何をお使いでしょうか?: 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)
回答No.1

 とりあえず以下のように回答いたします。わからないところがありましたら、補足などで再質問してください。 【 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++ のソースを標準準拠のコンパイラにかけるときなどに、限定して使うことが推奨されています。  以上の説明は、概略のものです。特に、名前空間名をいつ省略できるか、省略した場合どのように解釈されるかについては注意が必要です。

nubou
質問者

補足

(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に空間内にあるのでしょうか? よろしくお願いします  

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C++のnamespace stdについて

    C++のnamespace stdについて教えて下さい。 coutを使用する場合"iostream"をインクルードし、using namespaceでstd名前空間を使用します。 printfを使用する場合"cstdio"をインクルードし、using namespaceでstd名前空間を使用します。 どちらのインクルードファイルにもnamespace stdという風に同じ名前の名前空間を 使用しているのでしょうか? もしもそうだとしたらcstdio,iostreamの両方をインクルードしている場合 名前空間が競合してしまうのではないでしょうか? namespaceはjavaでいうパッケージにあたる物だと思っていたので、 これでは意味がないのではないかと思いました。 それとも意図的に同じ名前空間を定義している意味があるのでしょうか? C++を使い始めたばかりで戸惑っています。どなたかお答え頂ければありがたいです。

  • usingの宣言について

    C++プログラミングをしているのですが ヘッダファイルに using namespace std; を記入していると、「ヘッダファイルでは書かないこと」 と言われたのですがなぜなんでしょう? 今まで問題なく動いていましたが・・・ 逆にヘッダファイルにこれを書かないと vectorやstringを使用するとき 常に std::vectorやstd::string と書かなくてはいけないような気もするのですが。 誰か教えてください。 お願いします。

  •  namespace定義の使い方

     こんにちは。 C++を勉強しています。 今回は、namespace宣言して使いたいのですが、ヘッダー内でnamespace宣言をすると重複してしまいます。namespaceで定義したものを他のファイルでも使いたい場合はどうすればいいでしょうか? よろしくお願いします。

  • C++での <iostream.h>と<iostream>とusingnamespaceの関係等を教えてください。

    どうでもいい質問なのですが… C++で色々とソースを打っていると気づいたのです。 #include <iostream.h>とするとusing namespace std;の一文を書かなくてもコンパイルエラーになりません。 また、逆に#include <iostream>とするとusing namespace std;の一文が必要になります。 だから、h(ヘッダファイル)の.hは必要なのかな?と思い、#include <cstdlib.h>とするとコンパイルエラーになります。 なにか理屈がわかりません。コンパイラはVC++6.0です。よろしくご回答の方お願いいたします。

  • キャストの仕方(std::stringをconst char*へ)を教えてください。

    c++で作成したものをコンパイルしたところ、 下記のようなエラーメッセージが表示されました。 cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int stat(const char*, stat*) 自分の解釈では、 stat関数の第1引数がconst char*なのに、 プログラムの中では  #include <sys/types.h>  #include <sys/stat.h>  using namespace std;   :  string aaa;   :  struct stat st;  if(stat(aaa,&st)!=-1){・・・   : という感じで記述しているので、 型が変換できない という感じのことを言っているのかなぁ・・・? と思っているのですが、間違いですか? また、間違えていないとしたら・・・、 このstringで宣言しているaaaをchar*(?)にキャストする方法 と言いますか、このエラーを解決する方法を教えてください。 毎度のことですが、理解不十分で、質問の意味が通じにくいかも しれませんが、どうか宜しくお願いいたします。m(_ _)m

  • プログラミング言語Cとプログラミング言語C++

    プログラミング言語Cとプログラミング言語C++の違いって何ですか? あと、プログラミング言語C++についていくつか質問があります。 #include <iostream> using namespace std; void main(){ cout << "Hello world!" << endl; } このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか? using namespace stdって何ですか? あと、 cout <<"Hello world!"って何ですか?

  • C# usingの必要性について

    C#について質問させてください。 サブディレクトリにあるcsファイルに記述されているクラスを参照する場合、usingディレクティブでサブディレクトリ名を宣言しないとクラス名のみでの宣言はできませんか? ちょっと伝わりにくいかと思うので、具体例を記載します。 プロジェクト直下にmain.csというファイルとSubというディレクトリがあり、Subディレクトリにsub.csというファイルがあるとします。 main.csのmainメソッドの中でSub s = new Sub();のような記述をしたい場合、using Sub;という記載は(名前空間の解決のために)必要ですか? 私は必要と考えているのですが、usingディレクティブがなくても参照できているコードがありましたので、疑問に思い質問させて頂きました。

  • usingディレクティブの初期値について

    お世話になります。 Visua C# 2010 を起動してコードエディタを表示した際、 usingディレクティブが以下のように表示されます。 -------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { class Test { } } -------------------------------------- using System.IOを初期表示時に表示させたいのですが、 このusingの初期値はどこで指定するのでしょうか? どなたかご教授いただけないでしょうか? よろしくお願いいたします。

  • std::wstringの継承

    #include<iostream> #include<string> #include <stdlib.h> #include <locale.h> #include <boost/lexical_cast.hpp> using boost::lexical_cast; using namespace std; VisualC++2008ExpressEditionで文字や数字を簡単に扱えるクラスを今作ろうとしていて以下のように作ってみました。 class multiString:public std::wstring{ public:   multiString(const wchar_t *ws){     /* multiString class自体に代入 */   } }; しかし、このwchar_tをクラスに代入する処理として、 multiString(const wchar_t *s)std::wstring(s); とすると、「error C2082: 仮パラメータ 's' が再定義されました。」となりますし、 multiString(const wchar_t *s)*this=s; とすると、例外が発生してしまします。 wstringだったら、簡単に代入処理として出来るのですが、継承した場合はどの様に実装すればいいのでしょうか? 宜しくお願いします。

  • std::cout << p と std::cout << *p の違

    std::cout << p と std::cout << *p の違いは? VC++でコードを書きながらC++を学んでいます。 ポインタで疑問に思ったことがあるので質問させて下さい。 int* p; int n = 100; p = &a; 上記のように変数を宣言・代入した場合、 std::cout << p と std::cout << *p のどちらでも"100"と表示されます。 これら二つの違いは何でしょうか? 本来*pとすべきところをpにしてもVC++が気を利かせて &pのアドレスに入っているデータを表示してくれているということでしょうか?