Что означает "::" в с++?

Рейтинг: 2Ответов: 1Опубликовано: 01.10.2014

Не смог быстро нагуглить, что означает :: в с или с++? Гугл не хочет искать по этим символам. Знаю, что вопрос глупый, но все же.

Ответы

▲ 5Принят

А вы книгу читали по С++ хоть какую-нибудь? Это ж есть везде.

Вот отсюда, например (перевёл):

Уточнённый идентификатор — это идентификатор, имя функции-оператора, имя оператора-литерала или идентификатор шаблона, которому предшествует оператор разрешения области видимости ::, и, возможно, последовательность имён классов и пространств имён (namespace), разделённых такими же операторами разрешения области видимости.

Например, выражение std::string::npos является id-выражением, которое именует статический член npos класса string из пространства имён std. Выражение ::tolower именует функцию tolower из глобального пространства имён. Выражение ::std::cout именует глобальную переменную cout из пространства имён верхнего уровня std. Уточнённый идентификатор boost::signals2::connection именует тип connection, принадлежащий пространству имён signals2, которое само находится в пространстве имён boost.

Своими словами: в каждый момент времени у вас есть область видимости имён. Вы можете импортировать в неё (при помощи using) другие имена. Когда вы указываете имя, она ищется в вашей области видимости. Но если вы указываете ::, это модифицирует область видимости. X::Y — это то же, что просто Y, но ищется в пространстве имён, которое из вашей точки видно как X. ::X::Y — это то же самое, но X ищется не в вашей области видимости, а в глобальной (а в этом X уже ищется Y). И так далее.