C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 命名空間成員
定義在命名空間中的實體稱為命名空間成員。
在命名空間中定義的名字能夠被命名空間中的其它成員直接訪問,命名空間外部的代碼必須指出名字定義在哪個命名空間中
- 命名空間中定義的成員可以直接使用名字, 此時無須前綴
- 在命名空間定義的外部定義該命名空間的成員
- 命名空間之外定義的成員必須使用含有前綴的名字
eg. 可以在 cplusplusprimer 或全局作用域中定義 Sales_data operator+, 但是不能在一個不相關的作用域中定義這個運算符。
#include "Sales_data ?h" namespace cplusplus_primer { //重新打開命名空間 cplusplus_primer//命名空間中定義的成員可以直接使用名字, 此時無須前綴std::istream& operator()(std::istream& in, Sales_data & s ) { /* ... */ } } cplusplus_primer::Sales_data cplusplus_primer::operator+ (const Sales_data& lhs, const Sales_data& rhs) { Sales_data ret (lhs);//.. }2. 模板特例化
// 我們必須將模板特例化聲明成std的成員 namespace std {template <> struct hash<Sales_data>; }// 在std中添加了模板特例化的聲明后,我們就可以在命名空間std的外部定義它了 template<> struct std::hash<Sales_data> {size_t operator()(const Sales_data& s) const{return hash<string>()(s.bookNo) ^hash<unsigned>()(s.units_sold) ^hash<double>()(s.revenue);} };3. 全局命名空間global namespace
::member name 表示全局命名空間中的一個成員
4. 嵌套的命名空間
namespace cplusplus_primer {//第一個嵌套的命i空間:定義了庫的 Query 部分namespace QueryLib {class Query { /*...*/ };// ...}//第二個嵌套的命名空間:定義了庫的 Sales_data 部分namespace Bookstore {class Quote { / * ... */ };class Disc_quote public Quote { /* ... */ };//... }//調用方式 cplusplus_primer::QueryLib::Query4.1 作用域
嵌套的命名空間中的名字遵循的規則與往常類似: 內層命名空間聲明的名字將隱藏外層命名空
間聲明的同名成員。
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: s3c2440移植MQTT