結果だけでなく過程も見てください

たい焼きさんの日々の奮闘を綴る日記です。

スコープ解決演算子(::)


この前後輩に聞かれたので書いときます。


【質問】
C++のプログラムで、Win32APIの関数名の先頭にスコープ解決演算子を付けているものがあるが、あれは何?

例
::MessageBox( NULL, "Invalid Format", "Error", MB_OK );


【回答】
答えは二つあります。


一つ目は単純に、VisualStudioを使用しているときに::とタイプすると
IntelliSenseが働いて関数名一覧が表示されるので、楽に間違えることなくタイプできるということ。


二つ目は、MFCがWin32APIと同名のメンバ関数を実装していることによるものです。MFCのクラス内で、メンバ関数を呼ぶのか、Win32APIの関数を呼ぶのかを指定するために使います。


例えば、MFCのCWndクラスは、MessageBoxというメンバ関数を持ちます。
このクラスのメンバ関数の中で単にMessageBox関数をコールすると
メンバ関数のMessageBoxがコールされてしまうのです。


このため、Win32APIのMessageBoxをコールするときには「::MessageBox」とタイプするのです。