網站首頁 編程語言 正文
1. using聲明(引入單個名稱)
using聲明是將命名空間中某個名字單獨引入到當前作用域。這使得我們在當前作用域下可以直接使用該名字而無需使用作用域限定符::
。
using std::string; string s = "123";
using聲明可以改變派生類對父類成員的訪問控制。
class Base{ protected: int bn1; int bn2; }; class Derived: private Base{ //私有繼承 public: using Base::bn1; //在當前作用域中引入了父類的保護成員, 在當前作用域中可以訪問 }; class DerivedAgain: public Derived{ //在Derived的子類中仍然可以訪問bn1 }; int main(){ Derived d; DerivedAgain da; d.bn1 = 1; d.bn2 = 2; //error, 'bn2' is a private member of 'Base' da.bn1 = 3; //ok std::cout<<d.bn1<<std::endl; return 0; }
盡管Derived是Base的私有繼承,但是通過using聲明父類的成員,我們就可以在Derived類以及其后續派生類中使用了。
2. using指示(引入命名空間)
using指示就是將一個命名空間中的所有名字全部引入到當前作用域(將命名空間在當前作用域展開)??赡軙嬖诿麤_突的問題。
using namespace std; //我們常用的std命名空間展開
3. 類型重定義(替代typedef)
語法:
using alias = typename;//使用別名去替代原始類型(重命名)
在C++11中,我們可以使用這樣的語法來替代typedef的功能了。
using ULL = unsigned long long; //typedef unsigned long long ULL; using func = void(*)(int, int); //typedef void(*func)(int, int);
在Effective Modern C++中的條款9說明了, 使用using替代typedef。
typedef存在一些限制。
當我們想實現一個這樣的模板: 將一個int映射到任意類型的模板。類似于下面的功能:
typedef std::map<int, int> mapIntInt; typedef std::map<int, bool> mapIntBool; typedef std::map<int, std::string> mapIntString; //...
在C++98/03中,我們必須這樣寫才能實現:
template <class Val> struct mapInt{ typedef std::map<int, Val> type; }; int main(){ mapInt<int>::type imap; //將int映射到int的 mapInt<bool>::type bmap; //將int映射到bool的 mapInt<std::string>::type smap; //將int映射到string的 return 0; }
在C++11中,我們可以直接使用using重定義模板。
template <class Val> using mapInt = std::map<int, Val>; int main(){ mapInt<int> imap; mapInt<bool> bmap; mapInt<std::string> smap; return 0; }
總結
原文鏈接:https://blog.csdn.net/weixin_51696091/article/details/127976813
相關推薦
- 2022-01-05 webpack——Loader示例:打包css文件
- 2021-12-01 Android?NDK開發(C語言--聯合體與枚舉)_Android
- 2022-04-24 C++vector的用法你都知道嘛_C 語言
- 2021-12-09 golang中gin框架接入jwt使用token驗證身份_Golang
- 2023-01-30 django中只使用ModleForm的表單驗證_python
- 2022-07-08 Python如何通過地址獲取變量_python
- 2022-06-21 C#連接數據庫的幾種方法_C#教程
- 2022-08-02 C#如何自定義multipart/form-data的解析器_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支