日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性

發布時間:2025/3/21 c/c++ 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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::Query

4.1 作用域

嵌套的命名空間中的名字遵循的規則與往常類似: 內層命名空間聲明的名字將隱藏外層命名空
間聲明的同名成員。

總結

以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。