官术网_书友最值得收藏!

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之前。

主站蜘蛛池模板: 东明县| 石河子市| 沙雅县| 平昌县| 钦州市| 广水市| 沾益县| 汪清县| 杭州市| 黔江区| 宁阳县| 新河县| 鲁甸县| 潞城市| 新宁县| 南康市| 巴南区| 柳河县| 娄烦县| 九江县| 乌鲁木齐市| 红原县| 方城县| 堆龙德庆县| 察哈| 东阿县| 松溪县| 乳山市| 乡城县| 海宁市| 泰和县| 广州市| 中山市| 仙居县| 玉门市| 辉县市| 綦江县| 海阳市| 乐清市| 镇安县| 巴东县|