1. 程式人生 > 實用技巧 >c++一些不經常使用的特性

c++一些不經常使用的特性

  • 抑制構造用函式的隱式轉換(explicit)

     當類存在一個引數的建構函式的時候也可以將這個建構函式稱之為轉換建構函式,允許將引數型別的值轉換成類型別,但是隻允許一步型別轉換,如果想要禁止這種轉換操作,可以通過在建構函式前面新增 explicit 實現。注意,如果將建構函式宣告成了explicit的方式,那麼在例項化物件的初始化時只能夠使用直接初始化,而不能夠使用拷貝初始化。

 1 #include <iostream>
 2 #include <string>
 3 
 4 
 5 class test
 6 {
 7 public:
 8     test() = default
; 9 test(std::string str) 10 { 11 strName = str; 12 } 13 14 std::string strName; 15 }; 16 17 int main() 18 { 19 test t; 20 std::string strName = "Name"; 21 t = strName; 22 23 // 這一行是無法通過編譯的,因為只允許一步型別轉換 24 // 這一步操作需要先將字串轉換為string型別,然後再轉換為類型別 25 //
t = "Name"; 26 27 28 return 0; 29 }
  • 可變型別(mutable)

    一個可變資料型別永遠不會是const型別,如果在型別將成員宣告成了mutable型別的變數,例如mutable int n;,那麼即便是在const介面中也可以對其進行修改。

  • 友元的傳遞性

    友元是不具有傳遞性質的,假如B是A的友元,C是B的友元,那麼C不是A的友元,C不能夠訪問A類中的成員。

  • 聚合類

    如果一個類所有成員都是public的,沒有定義任何建構函式,沒有類內初始值,沒有基類,也沒有virtual方法,則稱這個類為聚合類,聚合類在例項化物件的時候可以採用初始化列表的方式進行初始化,值的順序與類中定義成員的順序是一致的,如果初始化列表中的值的數量少於成員的數量,則剩餘的成員採用值初始化的方式進行初始化,但是不可以多於類內資料成員的數量。