Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the meaning of Note 1 in the C++ class member name lookup rules?

From http://eel.is/c++draft/class.member.lookup#1 :

A search in a scope X for a name N from a program point P is a single search in X for N from P unless X is the scope of a class or class template T, in which case the following steps define the result of the search.

[Note 1: The result differs only if N is a conversion-function-id or if the single search would find nothing. — end note]

I'm having a hard time making a sense of the Note. It seems that a "single search" from a class scope will find preceding declarations at namespace scope, since the namespace scope contains the class scope. But, as we know, if the name has also been declared as a member of a non-dependent base class, then the base class member takes precedence over the namespace member. Note 1 seems to contradict this, since it's basically saying "if N is not a conversion-function-id, then you can just do a normal single search, and only if you fail to find anything, then use the procedure in this section". But the single search will succeed by finding the namespace scope declaration, and the class member lookup will yield a different result.

Where is the error in my understanding?

like image 964
Brian Bi Avatar asked May 31 '21 19:05

Brian Bi


People also ask

What is the use of a class member in C++?

Class members can be used as ‘compile-time’ constant using ‘const’ modifier and as runtime constants using ‘readonly’ modifier. Except for constructors and destructor, all the other members need to have name different from class name

What is class in C++ with example?

C++ Classes and Objects A Class is a user defined data-type which has data members and member functions. Data members are the data variables and member functions are the functions used to manipulate these variables and together these data members and member functions defines the properties and behavior of the objects in a Class.

What are the members of a class?

Class members, in C#, are the members of a class that represent the data and behavior of a class. Class members are members declared in the class and all those (excluding constructors and destructors) declared in all classes in its inheritance hierarchy.

When a class is defined in C++ memory is allocated?

When a class is defined, no memory is allocated but when it is instantiated (i.e. an object is created) memory is allocated. A class is defined in C++ using keyword class followed by the name of class. The body of class is defined inside the curly brackets and terminated by a semicolon at the end.


Video Answer


1 Answers

Answer

A single search considers only one scope—not an enclosing namespace or even a base class. It’s an unqualified search that considers all enclosing scopes. Single searches and (plain) searches are subroutines of these higher-level procedures.

Context

It should be said, since there have been a lot of these questions lately, that these terms exist to reduce ambiguity and imprecision (e.g., CWG issue 191) in the definitions of “programmer-level” constructs like (un)qualified name lookup. I didn’t invent them to increase the number of vocabulary words that the typical programmer should be expected to have memorized. (Put differently, the standard is not a tutorial.)

Of course, there’s nothing special about this particular question in this regard, but I must hope that this will thereby tend to find the people that need to see it.

like image 194
Davis Herring Avatar answered Oct 26 '22 16:10

Davis Herring