書名: 現代C++語言核心特性解析作者名: 謝丙堃本章字數: 392字更新時間: 2021-09-27 17:49:50
2.2 嵌套命名空間的簡化語法
有時候打開一個嵌套命名空間可能只是為了向前聲明某個類或者函數,但是卻需要編寫冗長的嵌套代碼,加入一些無謂的縮進,這很難讓人接受。幸運的是,C++17標準允許使用一種更簡潔的形式描述嵌套命名空間,例如:
namespace A::B::C {
int foo() { return 5; }
}
以上代碼等同于:
namespace A {
namespace B {
namespace C {
int foo() { return 5; }
}
}
}
很顯然前者是一種更簡潔的定義嵌套命名空間的方法。除簡潔之外,它也更加符合我們已有的語法習慣,比如嵌套類:
std::vector<int>::iterator it;
實際上這份語法規則的提案早在2003年的時候就已經提出,只不過到C++17才被正式引入標準。另外有些遺憾的是,在C++17標準中沒有辦法簡潔地定義內聯命名空間,這個問題直到C++20標準才得以解決。在C++20中,我們可以這樣定義內聯命名空間:
namespace A::B::inline C {
int foo() { return 5; }
}
// 或者
namespace A::inline B::C {
int foo() { return 5; }
}
它們分別等同于:
namespace A::B {
inline namespace C {
int foo() { return 5; }
}
}
namespace A {
inline namespace B {
namespace C {
int foo() { return 5; }
}
}
}
請注意,inline
可以出現在除第一個namespace
之外的任意namespace
之前。
推薦閱讀
- Java設計模式及實踐
- FLL+WRO樂高機器人競賽教程:機械、巡線與PID
- MongoDB權威指南(第3版)
- Mathematica Data Analysis
- Cocos2d-x Game Development Blueprints
- 編程可以很簡單
- 區塊鏈架構之美:從比特幣、以太坊、超級賬本看區塊鏈架構設計
- 從程序員角度學習數據庫技術(藍橋杯軟件大賽培訓教材-Java方向)
- HTML5+CSS3+JavaScript 從入門到項目實踐(超值版)
- SQL Server on Linux
- Hands-On ROS for Robotics Programming
- 分布式系統架構與開發:技術原理與面試題解析
- ASP.NET jQuery Cookbook(Second Edition)
- Java程序設計(項目教學版)
- Mastering VMware vSphere Storage