问题
As far as I can tell, the term fully qualified isn't mentioned in the standard (e.g.), but I can recall "hearing" it many times online.
What do people mean when they say a name is fully qualified?
Does this count?
A::f()
or only this?
::A::f()
And, if it is standard, which wording have I not found?
回答1:
An identifier that uses the scope resolution operator is a qualified name as per [expr.prim.id.qual]. Otherwise it is unqualified.
The standard doesn't define the meaning of fully qualified, but it does mention it in [library]/[requirements]/[organization]/[contents] which says (quote from standard draft)
Whenever a name x defined in the standard library is mentioned, the name x is assumed to be fully qualified as ::std::x, unless explicitly described otherwise. For example, if the Effects: element for library function F is described as calling library function G, the function ::std::G is meant.
Wikipedia defines Fully qualified name:
In computer programming, a fully qualified name is an unambiguous name that specifies which object, function, or variable a call refers to without regard to the context of the call
Only a name qualified starting from the global namespace is unambiguous without context. This is the common usage.
回答2:
Indeed, it is not a standard term. It has no definition in the standard.
However, the phrase "fully qualified" appears exactly once, in [contents] (15.5.1.1 "Library contents" in the as-of-writing most current draft N4800) paragraph 3:
Whenever a name
x
defined in the standard library is mentioned, the namex
is assumed to be fully qualified as::std::x
, unless explicitly described otherwise.
So in this definition, only names starting with ::
are fully qualified.
来源:https://stackoverflow.com/questions/56273345/what-is-a-fully-qualified-name