Двойное двоеточие перед функцией в С++

131
07 ноября 2021, 12:00

Операция двойного двоеточия называется операцией разрешения области видимости. Когда мы пишем ::func() (слева от оператора ничего нет), мы уточняем принадлежность к области видимости глобального пространства имён? Зачем?

Answer 1

Допустим, Ваш код работает в пространстве имён ns1, внутри которого есть функция ns1::func(), но при этом Вам нужно вызвать функцию func(), определённую без пространства имён (в глобальном пространстве). Вот в таких случаях Вам и нужно использовать ::func(), ибо без этого уточнения компилятор вызовет ns1::func(), чего Вам не хотелось бы.

Answer 2

Правила поиска имен (name lookup) в С++ очень сильно отличаются для случая квалифицированных имен (т.е. с явным указанием класса или пространства имен) и неквалифицированных имен (без такого указания). Если вас чем-то не устраивает поведение неквалифицированного поиска, которое сложно, многоэтажно и включает в себя массу нюансов вроде ADL, то вы можете подавить это поведение путем указания квалифицированного имени.

В частности, в качестве частного примера, вам может понадобиться вызвать функцию ::func там, где ее имя скрыто локальной переменной int func;.

READ ALSO
Добавить пробел между символами С++

Добавить пробел между символами С++

Необходимо добавить пробелы между символами вывода и записать их в строки

101
Как писать Native программы?

Как писать Native программы?

Подскажите где можно почитать про написание Native программ (которые можно запустить до запуска графической оболочки Windows)Пока только нагуглил,...

83
Как правильно задать пространство имен

Как правильно задать пространство имен

Как на примере этого класса исправить ошибку компиляции?

210