C++11こまごました知識のセクション

2858 ワード

リストの初期化
組み込みタイプのリスト初期化
int a{1};
int b = {2};
//        
vector arr{1, 2, 3, 4, 5};  
//       
int* arr3 = new int[5]{1,2,3,4,5}; 
map m{{1,1}, {2,2,},{3,3},{4,4}}; 

カスタムタイプは、リストを初期化することもできます.
class Point
{
public:
  Point(int x = 0, int y = 0): _x(x), _y(y)
  {}
private:
  int _x;
  int _y;
}; 

int main()
{
  Pointer p{ 1, 2 };
  return 0;
} 

複数のオブジェクトがリストの初期化をサポートするには、クラス(テンプレートクラス)にinitializer_を追加する必要があります.Listタイプパラメータの構造関数でいいです.注:initializer_Listは、begin()、end()反復器、および区間内の要素の個数を取得する方法size()の3つの方法を主に有するシステムカスタムクラステンプレートです.
#include 
template
class Vector {
public:
// ...
Vector(initializer_list l): _capacity(l.size()), _size(0)
{
_array = new T[_capacity];
for(auto e : l)
_array[_size++] = e;
} 

Vector& operator=(initializer_list l) {
delete[] _array;
size_t i = 0;
for (auto e : l)
_array[i++] = e;
return *this;
} 

private:
T* _array;
size_t _capacity;
size_t _size;
}; 

タイプ導出
Auto:コンパイル時に初期化式に基づいてタイプを導出します.
decltype:ランタイムタイプ識別.
decltypeは、式の実際のタイプに基づいて演出定義変数をプッシュする場合に使用されるタイプです.
  • 式タイプを変数の定義タイプdecltype(1+2)aとして推論する.
  • 推論関数の戻り値のタイプdecltype(func(10))b;decltype:パラメータリストがある場合、戻り値タイプcout<"b:type:"<
    finalキーワード
    class B final      //          
    {};
    

    overrideキーワード

    デフォルトメンバー関数の制御
    明示的デフォルト関数
    C++11では、デフォルト関数の定義または宣言に=defaultを付けることで、=defaultで修飾された関数を明示的な指示コンパイラがその関数のデフォルトバージョンを生成し、=defaultで修飾された関数を明示的なデフォルト関数と呼ぶことができます.
    デフォルト関数の削除
    メンバー関数を有効にしたくない場合はdeleteを使用します.
    class A
    {
    public:
    A(int a): _a(a)
    {} 
    
    //         ,      
    A() = default; 
    //      ,                     
    A& operator=(const A& a); 
    
    //                          
    A(const A&) = delete;
    A& operator(const A&) = delete; 
    private:
    int _a; 
    };
    
    A& A::operator=(const A& a) = default; 
    

    右参照
    左:=の両側に現れるか、アドレスを取ることができる.
    右ではないものはすべて左です.
    右の値:=の右側にのみ表示されるか、アドレスを取得できません.右の値は次のとおりです.
    純右値:定数、一時変数/匿名変数一時変数/匿名変数:関数が値で返される変数、クラスのコンストラクション関数を呼び出して作成される変数が消滅します:宣言サイクルが終了します
    参照:左、右の値の参照-構文の意味:変数の別名です.
    ≪左参照|Left References|oem_src≫:左も右も参照できます.
    左の値が右の値を参照している場合は、constを追加する必要があります.
    右参照:右のみ参照できます.
    右の値は最大の役割を参照します:指向するエンティティが右の値であることを示して、エンティティの資源は直接持って行かれて、コピーの効率を高めて、本質は浅いコピーです.
    移動構造:パラメータタイプが右の値で参照され、コピーの効率が向上します.コピー構造に対して、浅いコピーを実現した場合、エラーが発生しないようにすることができる.2.右の値は、一般的にライフサイクルが終了するエンティティを参照します(値が失われます).右の値弓|を直接取得することができます.深いコピーは必要ありません.
    移動賦値:パラメータタイプが右の値である参照も浅いコピーであり、原理は同じである.