【发布时间】:2014-02-24 05:17:25
【问题描述】:
我在 VS C++ 中看到过代码示例,例如 ::function(),但我无法理解它的含义。
我知道 :: 用于从类外部访问成员函数,但我看到了我没有找到这种情况的示例。例如在下面的代码中
// For painting in memory
class MemCanvas: public Canvas
{
public:
MemCanvas (HDC hdc)
: Canvas (::CreateCompatibleDC (hdc))
{}
~MemCanvas ()
{
::DeleteDC(_hdc);
}
};
查看 ::CreateCompatibleDC() 函数!! 我知道它是在 Windows.h 中定义的,但我无法猜测它是如何在这里定义的。
【问题讨论】:
-
一元
::指的是全局命名空间。 -
NamespaceName::X和ClassName::X用于访问命名空间或类的成员。::X用于访问全局命名空间的成员(文件范围内的所有内容都属于无名命名空间,除非明确放置在某个命名命名空间或类中) -
问题是关于类而不是函数,但您可能仍然会发现我的回答 here 很有用。
-
提供的代码示例不完整,因此假设了一些事实。 ::CreateCompatibleDC() 在某些包含(windows.h)中定义和声明,这些包含可能在使用的类的头文件中提到。正如@chris 所提到的,“::”指的是全局命名空间。所以基本上你在全局命名空间中搜索 CreateCompatibleDC 而不是当前或其他命名空间。注意 ::CreateCompatibleDC() 在这里没有定义为你的问题中所说的,它只是从你的初始化参数列表中调用的。基类 Canavas 构造函数使用 ::CreateCompatibleDC() 的结果作为其参数
-
您似乎明白
::的含义,那么您对这段代码到底有什么不明白的地方呢?::CreateCompatibleDC()调用具有在全局命名空间中声明的名称的函数;该函数调用的结果被传递给Canvas构造函数。