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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(chap 18 大型程序工具) 类、 命名空间与作用域

發(fā)布時(shí)間:2025/3/21 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(chap 18 大型程序工具) 类、 命名空间与作用域 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 命名空間內(nèi)部名字的查找規(guī)則

由內(nèi)向外依次查找每個(gè)外層作用域。

  • 外層作用域也可能是一個(gè)或多個(gè)嵌套的命名空間, 直到最外層的全局命名空間查找過程終止。

  • 只有位于開放的塊中且在使用點(diǎn)之前聲明的名字才被考慮

namespace A {int i;namespace B {int i; // hides A::i within Bint j;int f1(){int j; // j is local to f1 and hides A::B::jreturn i; // returns B::i}} // namespace B is closed and names in it are no longer visibleint f2() {return j; // error: j is not defined}int j = i; // initialized from A::i}

1.1 命名空間中的類的查找規(guī)則

當(dāng)成員函數(shù)使用某個(gè)名字時(shí), 首先在該成員中進(jìn)行查找, 然后在類中查找( 包括基類), 接著在外層作用域中查找,這時(shí)一個(gè)或幾個(gè)外層作用域可能就是命名空間

namespace A {int i;int k;class C1 {public:C1(): i(0), j(0) { } // ok: initializes C1::i and C1::jint f1(){return k; // returns A::k}int f2(){return h; // error: h is not defined}int f3();private:int i; // hides A::i within C1int j;};int h = i; // initialized from A::i } // member f3 is defined outside class C1 and outside namespace A int A::C1::f3() {return h; // ok: returns A::h }

2. 實(shí)參相關(guān)的查找與類類型形參

隱藏規(guī)則:直接訪問輸出運(yùn)算符。

當(dāng)我們給函數(shù)傳遞一個(gè)類類型的對(duì)象時(shí), 除了在常規(guī)的作用域查找外,還會(huì)查找實(shí)參類所屬的命名空間。 這一例外對(duì)于傳遞類的引用或指針的調(diào)用同樣有效

eg.

std::string s; std::cin ? s;operator>> (std::cin, s);

或者使用函數(shù)調(diào)用的形式以把命名空間的信息包含進(jìn)來:

std::operator?(std::cin, s) ; / / 正確: 顯式地使用 std::>>

2.1 查找與 std::move 和 std::forward

如果在應(yīng)用程序中定義了一個(gè)標(biāo)準(zhǔn)庫中已有的名字, 則將出現(xiàn)以下兩種情況中的一種:

  • 根據(jù)一般的重載規(guī)則確定某次調(diào)用應(yīng)該執(zhí)行函數(shù)的哪個(gè)版本
  • 應(yīng)用程序根本就不會(huì)執(zhí)行函數(shù)的標(biāo)準(zhǔn)庫版本

2.2 友元聲明與實(shí)參相關(guān)的查找

namespace A {class C {// 兩個(gè)友元, 在友元聲明之外沒有其他的聲明// 這些函數(shù)隱式地成為命名空間 A 的成員// 除非另有聲明, 否則不會(huì)被找到friend void f(const C& ); // 才艮據(jù)實(shí)參相關(guān)的查找規(guī)貝可以被找到friend void f2();} }

當(dāng)類聲明了一個(gè)友元時(shí), 該友元聲明并沒有使得友元本身可見

一個(gè)另外的未聲明的類或函數(shù)如果第一次出現(xiàn)在友元聲明中, 則我們認(rèn)為它是最近的外層命名空間的成員

int main ( ) {A::C cobj;f(cobj);f2();//正確: 通過在 A::C 中的友元聲明找到 A::f//錯(cuò)誤: A::f 2 沒有被聲明 }

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。