網(wǎng)站首頁 編程語言 正文
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類以及其后續(xù)派生類中使用了。
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存在一些限制。
當我們想實現(xiàn)一個這樣的模板: 將一個int映射到任意類型的模板。類似于下面的功能:
typedef std::map<int, int> mapIntInt; typedef std::map<int, bool> mapIntBool; typedef std::map<int, std::string> mapIntString; //...
在C++98/03中,我們必須這樣寫才能實現(xiàn):
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; }
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_51696091/article/details/127976813
相關(guān)推薦
- 2022-07-03 python類的私有屬性和公共屬性說明_python
- 2023-04-27 React中使用Axios發(fā)起POST請求提交文件方式_React
- 2022-11-14 值類型和引用類型的區(qū)別 I 數(shù)據(jù)結(jié)構(gòu)中的堆和棧和內(nèi)存中的堆和棧的區(qū)別
- 2022-04-11 解決git push出現(xiàn)error: failed to push some refs to 錯誤
- 2022-02-13 Chrome控制臺報錯:無法加載 SourceMap 錯誤:狀態(tài)代碼 404,net::ERR_HT
- 2023-10-09 markdown和富文本編輯器的區(qū)別
- 2022-08-10 Go語言pointer及switch?fallthrough實戰(zhàn)詳解_Golang
- 2022-06-12 Redis高并發(fā)場景下秒殺超賣解決方案(秒殺場景)_Redis
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支