- ベストアンサー
::とは何者?
ゲーム制作の初心者です。最近CからC++に移りつつある傾向にあります。 ゲーム制作の本を見るとどの本にもこの「::」が、もう常識のように出てきます。どうやら「スコープ解決演算子」という名前らしいのですが、それ以外は調べても、なかなか手掛かりが見つからずまだ謎のままです。このスコープ解決演算子とはどのような意味でどのような使い方をするのでしょうか? 今後、私と非常に強い絆で結ばれそうな予感がするので教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
これからゲーム製作をされると言う事なので、きっとWin32APIを直接触る様になると思います。APIって引数もやたら多いし、毎回同じ様な事を書くのが面倒になってきっとオリジナルのカプセル化に走ると思います。その時::の便利さが解かると思います。 CMyClass::CreateWindow(~) {←APIと同じ名前の自分オリジナルのCreateWindow … ::CreateWindow(~); ←Win32APIのCreateWindow } なんて感じに。 もちろん::を知らなければ、 CMyClass::myCreateWindow(~) { … CreateWindow(~); } とか…逃げる方法はいくらでもあります(私も当初::が理解できずこーしてた^^;)。 後、同じ様に意味が解かると便利な物としてthisとかnew/deleteも私はお勧めです。焦る必要は無いと思います。必ず、フッとした事で理解できる日が来るので… # ただ…理解すると…既存のソースのあちこちを修正したくなる衝動に駆られる^^;…ので早目に理解した方が無駄は無いかも…
その他の回答 (4)
- ddnp009
- ベストアンサー率25% (15/58)
"スコープ"という用語の意味はお分かりですよね。 グローバルとかローカルとかファイル単位とか。 識別子が色々なオブジェクト(またはnamespace, struct, enum...)間で 重複する際に、どの母体(?)を指すか明示するのに使います。 実例は、お持ちの本の中で山のように出てくるでしょうから割愛
お礼
まだCがメインでC++の教科書配布されてないため手元にC++の本は手元にないです。まずはCを理解しなくてはなりませんでしたから。それに一週間後C言語検定ですし。 ご返答ありがとうございました。また何かあったらよろしくお願いします。
- inaba502
- ベストアンサー率23% (22/94)
「::」は「の」と読んだら分かりやすいですよ。 A::x → Aクラス「の」x関数、という感じです。 なかなか慣れないですよね^^; グローバル変数とローカル変数で、同じ名称のものが 使われた場合、Cではローカル変数が優先されてしまっていたんですが C++では、::(グローバル変数名)とすることで グローバルにもアクセスできるようになりました。 -------------------------------------------- int dt = 100; //グローバル変数 void main() { int dt =200,a,d; a = ::dt; // グローバルのdtを代入 b = dt; // ローカルのdtを代入 } }
お礼
超わかりやすい解説でした。ちょうどC言語2級検定の勉強で変数同士の衝突の話がありましたので復習にもなりました。※もちろんCでのおはなしです。 まだこの言語に足を踏み入れたばっかりですので今後また聞く事もあるかもしれませんが、その時はよろしくおねがします。 超わかりやすい解説ありがとうございます。
- jacta
- ベストアンサー率26% (845/3158)
日本語では訳語がばらばらなので、検索しても捕まえにくいかもしれませんね。ちなみに、JIS X3014:2003では、5.1 一次式のところに、「有効範囲解決演算子」という名前で出ています。原語では「scope resolution operator」です。 有効範囲解決演算子は、名前空間有効範囲(大域的名前空間有効範囲を含む)およびクラス有効範囲を特定するために使用します。 具体的には、 int x = 1; struct A { static int x; }; int A::x = 2; namespace B { int x = 3; } int main() { int x = 4; std::cout << ::x << std::endl; std::cout << A::x << std::endl; std::cout << B::x << std::endl; std::cout << x << std::endl; } とすれば、 1 2 3 4 という結果になります。 変数だけでなく、関数や型名や列挙定数といった識別子に対しても同様です。
- 6dou_rinne
- ベストアンサー率25% (1361/5264)
C++の解説書、入門書を見れば必ず解説がありますが。 A::xならクラスAの関数xであり、::xなら関数の外にある関数xで、通常ではアクセスできないこれらの関数にスコープ解決演算子を使うことによりアクセスできるようになるというものです。
お礼
ライブラリの関数の引数の数はすごい数です。だから、途中でどれがどの引数か目が回る事もあります(><)だからどうにかならないかなぁとよく思っています。 「::」がそれを解決できるのであれば早期覚えたいです。