#cpp
Операция двойного двоеточия называется операцией разрешения области видимости. Когда мы пишем ::func() (слева от оператора ничего нет), мы уточняем принадлежность к области видимости глобального пространства имён? Зачем?
Ответы
Ответ 1
Допустим, Ваш код работает в пространстве имён ns1, внутри которого есть функция ns1::func(), но при этом Вам нужно вызвать функцию func(), определённую без пространства имён (в глобальном пространстве). Вот в таких случаях Вам и нужно использовать ::func(), ибо без этого уточнения компилятор вызовет ns1::func(), чего Вам не хотелось бы.Ответ 2
Правила поиска имен (name lookup) в С++ очень сильно отличаются для случая квалифицированных имен (т.е. с явным указанием класса или пространства имен) и неквалифицированных имен (без такого указания). Если вас чем-то не устраивает поведение неквалифицированного поиска, которое сложно, многоэтажно и включает в себя массу нюансов вроде ADL, то вы можете подавить это поведение путем указания квалифицированного имени. В частности, в качестве частного примера, вам может понадобиться вызвать функцию ::func там, где ее имя скрыто локальной переменной int func;.
Комментариев нет:
Отправить комментарий