Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

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

#cpp


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


Ответы

Ответ 1



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

Ответ 2



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

Комментариев нет:

Отправить комментарий