Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
c_namespaces [2018/02/01 10:53] – [Inline namespaces (new in C++11)] rpjdayc_namespaces [2018/02/01 14:50] (current) – [using-Directives] rpjday
Line 41: Line 41:
 namespace ATT = American_Telephone_and_Telegraph; // namespace alias namespace ATT = American_Telephone_and_Telegraph; // namespace alias
 </code> </code>
 +
 +Also, namespace identifier is "... either a previously unused identifier, in which case this is //original-namespace-definition// or the name of a namespace, in which case this is //extension-namespace-definition//."
  
 ===== Extensibility (namespaces are "open") ===== ===== Extensibility (namespaces are "open") =====
Line 70: Line 72:
  
 ==== using-Declarations ==== ==== using-Declarations ====
 +
 +Read [[http://en.cppreference.com/w/cpp/language/namespace#Using-declarations|this]] carefully.
  
 "makes the symbol name from the namespace ns_name accessible for unqualified lookup as if declared in the same class scope, block scope, or namespace as where this using-declaration appears." "makes the symbol name from the namespace ns_name accessible for unqualified lookup as if declared in the same class scope, block scope, or namespace as where this using-declaration appears."
Line 91: Line 95:
 } }
 </code> </code>
 +
 +Useful for introducing base class members into derived class definitions.
  
 ==== using-Directives ==== ==== using-Directives ====
 +
 +cppreference.com link [[http://en.cppreference.com/w/cpp/language/namespace#Using-directives|here]].
  
 "From the point of view of unqualified name lookup of any name after a using-directive and until the end of the scope in which it appears, every name from ns_name is visible as if it were declared in the nearest enclosing namespace which contains both the using-directive and ns_name." "From the point of view of unqualified name lookup of any name after a using-directive and until the end of the scope in which it appears, every name from ns_name is visible as if it were declared in the nearest enclosing namespace which contains both the using-directive and ns_name."
Line 157: Line 165:
 ===== Nested namespaces ===== ===== Nested namespaces =====
  
-Coming soon ...+<code> 
 +void h(); 
 + 
 +namespace X { 
 +  void g(); 
 +  // ... 
 +  namespace Y { 
 +    void f(); 
 +    void ff(); 
 +    // ... 
 +  } 
 +
 + 
 +void X::Y::ff() 
 +
 +  f(); g(); h();   // all fine 
 +
 + 
 +void X::g() 
 +
 +  f();             // error: no f() in X 
 +  Y::f();          // OK 
 +
 + 
 +void h() 
 +
 +  f();             // error: no global f() 
 +  Y::f();          // error: no global Y 
 +  X::f();          // error: no f() in X 
 +  X::Y::f();       // OK 
 +
 +</code>
  
 +NOTE: C++17 allows ''namespace A::B::C { ... }''.
 ===== Namespace aliases ===== ===== Namespace aliases =====
  
Line 177: Line 217:
 </code> </code>
  
-A namespace alias cannot be used to re-open a namespace.+  * Aliases can be used to refer to nested namespaces. 
 +  * A namespace alias cannot be used to re-open a namespace.
  
-(Add ability to alias nested namespaces.) 
 ===== Inline namespaces (new in C++11) ===== ===== Inline namespaces (new in C++11) =====
  
Line 246: Line 286:
 ===== Unnamed namespaces ===== ===== Unnamed namespaces =====
  
-Its members have potential scope from their point of declaration to the end of the translation unit, and have internal linkage.+Its members have potential scope from their point of declaration to the end of the translation unit, and have //internal// linkage. The aim is to preserve locality of code rather than to present an interface to users. 
 + 
 +<code> 
 +#include "header.h" 
 +namespace { 
 +  int a; 
 +  void f()  {...} 
 +  int g()   {...} 
 +
 +</code> 
 + 
 +An unnamed namespace has an implied using-directive.
  
 +"Unnamed namespaces in different translation units are different. As desired, there is no way of naming a member of an unnamed namespace from another translation unit."
 ===== Argument dependent lookup (ADL) ===== ===== Argument dependent lookup (ADL) =====
  
  • c_namespaces.1517482426.txt.gz
  • Last modified: 2018/02/01 10:53
  • by rpjday