Я вижу пример кода, например :: function() в VS C++, но я не могу понять, что это значит.
Я понимаю, что :: используется для доступа к функции-члену из внешнего класса, но я видел примеры, где я не нахожу этот случай. Например, в следующем коде
// For painting in memory
class MemCanvas: public Canvas
{
public:
MemCanvas (HDC hdc)
: Canvas (::CreateCompatibleDC (hdc))
{}
~MemCanvas ()
{
::DeleteDC(_hdc);
}
};
См. Функцию :: CreateCompatibleDC()! Я понимаю, что он определен в Windows.h, но как он определяется здесь, я не могу догадаться.
::
ссылается на глобальное пространство имен.
В качестве префикса для вызова функции это означает, что это не функция-член, это глобальная функция пространства имен.
Вместе с соглашением об именах для функций Windows API он в значительной степени идентифицирует функцию Windows API как таковую. Читателю. Обычно там нет конфликтов имен, поэтому для компилятора это не обязательно: это просто устройство для общения с читателем кода.
::
относится к глобальному пространству имен.NamespaceName::X
иClassName::X
используются для доступа к члену пространства имен или класса.::X
используется для доступа к члену глобального пространства имен (безымянного пространства имен, которому принадлежит все в области видимости файла, если только оно явно не помещено в некоторое именованное пространство имен или класс)