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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++ using的三种使用策略以及具体的用法

發布時間:2023/12/13 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ using的三种使用策略以及具体的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Using的使用方法

1,命名空間的使用

  • 為了防止代碼沖突,都會使用到命名空間。假設這樣一種情況,當一個班上有兩個名叫 Zara 的學生時,為了明確區分他們,我們在使用名字之外,不得不使用一些額外的信息,比如他們的家庭住址,或者他們父母的名字等等。
  • 同樣的情況也出現在 C++ 應用程序中。例如,可能會寫一個名為 xyz() 的函數,在另一個可用的庫中也存在一個相同的函數 xyz()。這樣,編譯器就無法判斷所使用的是哪一個 xyz() 函數。 因此,引入了命名空間這個概念,專門用于解決上面的問題,它可作為附加信息來區分不同庫中相同名稱的函數、類、變量等。使用了命名空間即定義了上下文。本質上,命名空間就是定義了一個范圍。 我們舉一個計算機系統中的例子,一個文件夾(目錄)中可以包含多個文件夾,每個文件夾中不能有相同的文件名,但不同文件夾中的文件可以重名。

  • 比如 namespace sdf;
  • 在編碼的時候還可以使用sdf::加具體的類方法,也可以使用using namespace sdf;

不連續的命名空間

  • ?命名空間可以定義在幾個不同的部分中,因此命名空間是由幾個單獨定義的部分組成的。一個命名空間的各個組成部分可以分散在多個文件中。 所以,如果命名空間中的某個組成部分需要請求定義在另一個文件中的名稱,則仍然需要聲明該名稱。下面的命名空間定義可以是定義一個新的命名空間,也可以是為已有的命名空間增加新的元素:
namespace namespace_name {// 代碼聲明 }

?嵌套的命名空間

  • 命名空間可以嵌套,您可以在一個命名空間中定義另一個命名空間,如下所示:
namespace namespace_name1 {// 代碼聲明namespace namespace_name2 {// 代碼聲明} }
  • ?可以通過使用::運算符號來訪問嵌套的命名空間中的成員

?

2,在子類中引用基類的成員

class T5Base { public:T5Base() {}virtual ~T5Base() {}static void test1() { std::cout << "T5Base test1..." << std::endl; }//protected: // static int T5Base::value = 9; };class T5Derived :T5Base { public:using T5Base::test1; // using T5Base::value; // void test2() { std::cout << "value is " << value << std::endl; } };//主函數 T5Derived::test1();
  • 基類中的成員變量是public的,但是在private繼承之后,對于外界這個數值就是private的,也就是T5Derived無法使用這個value;這個時候需要使用using T5Base::test1就可以使用了。
  • 上面的value,我沒有改對,有會的小伙伴可以教教我
  • using只是引用,不參與形參的指定

3,別名的指定

  • 在C++11中,提出了使用using指定別名,using value_type = Ty;那么以后使用value_type的地方就代表使用了Ty
  • 這種使用的方法類似于typedef,那么二者之間的區別在于什么地方呢?

例如

  • typedef std::unique_ptr<std::unordered_map<std::string, std::string>> UPtrMapSS;
  • using UPtrMapSS = std::unique_ptr<std::unordered_map<std::string, std::string>>;

但是別的更加復雜的場景會讓你覺得使用using會更加簡單一些

  • typedef void (*FP) (int, const std::string&);

  • 如果不熟悉指針和typedef,很難看出FP是一個別名,代表著一個函數指針,而指向函數的返回類型是void,接受的參數是int、const std::string &;
  • 如果使用C++11,using FP = void (*) (int, const std::string&);Fp是一個別名,using將別名的名字放在了左邊,而將別名指向了右邊,簡單清晰

using可以實現但是typedef不可以使用?alias templates, 模板別名

  • template <typename T>
  • using Vec = MyVector<T, MyAlloc<T>>; ?
  • // usage
  • Vec<int> vec;

參考鏈接

  • C++ 中using 的使用

?

?

?

總結

以上是生活随笔為你收集整理的C++ using的三种使用策略以及具体的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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