Что такое полное имя? - PullRequest
42 голосов
/ 23 мая 2019

Насколько я могу судить, термин полностью квалифицированный не упоминается в стандарте ( например, ), но я могу вспомнить, что слышал его много раз в Интернете.

Что люди имеют в виду, когда говорят, что имя полностью квалифицировано?

Это считается?

A::f()

или только это?

::A::f()

И, если является стандартом, какую формулировку я не нашел?

Ответы [ 2 ]

42 голосов
/ 23 мая 2019

Идентификатор, который использует оператор разрешения области, является квалифицированным именем согласно [expr.prim.id.qual]. В противном случае он не квалифицирован.

Стандарт не определяет значение полностью квалифицированный , но он упоминает в [библиотека] / [требования] / [организация] / [содержание], где говорится (цитата из стандартного проекта)

Всякий раз, когда упоминается имя x, определенное в стандартной библиотеке, предполагается, что имя x полностью квалифицировано как :: std :: x, если явно не указано иное. Например, если элемент Effects: для библиотечной функции F описывается как вызывающий библиотечную функцию G, подразумевается функция :: std :: G.

Википедия определяет Полное имя :

В компьютерном программировании полностью определенное имя - это однозначное имя, которое указывает, на какой объект, функцию или переменную ссылается вызов, независимо от контекста вызова

Однозначное имя, начинающееся с глобального пространства имен, однозначно без контекста. Это общее использование.

22 голосов
/ 23 мая 2019

Действительно, это не стандартный термин. У него нет определения в стандарте.

Однако фраза «полностью определено» встречается ровно один раз в [содержание] (15.5.1.1 «Содержимое библиотеки» в самом последнем наброске N4800 на момент написания статьи), пункт 3:

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

Таким образом, в этом определении только имена, начинающиеся с ::, полностью определены.

...