c++primerレコード1

2967 ワード

目次
  • C++レコード
  • 符号付きタイプと符号なしタイプを混用しないでください.主に比較加減である.
  • 右値参照.TODO
  • 配列ポインタとポインタ配列
  • const
  • typedef
  • auto
  • decltype TODO


  • C++レコード
    符号付きタイプと符号なしタイプを混用しないでください.主に比較加減である.
    右参照TODO
    配列ポインタとポインタ配列
    a.配列ポインタ:ポインタであり、配列を指す.次のようになります.
    //     .   "[]" "*"     ,    "()"
    int (*parr)[5];
    
    //     
    int a[] = {1,2,3,4,5};
    parr = &a;
    
    //   
    auto len = sizeof(a)/sizeof(a[0]);
    for(int i = 0;i < len; ++i){
        cout << (*parr)[i] << endl;
    }
    

    b.ポインタ配列:配列で、中に保存されているポインタです.次のようになります.
    // a     10      ,          int     .
    int* a[10];

    const
    参照はオブジェクトではありません.したがって、参照を指すポインタはない.最上位constと最下位constをどのように区別しますか?ポインタconst修飾子を追加する場合は、次の2つのケースがあります.
    // 1.   int     
    const int *a;
    
    // 2.   int     
    int *const b;

    状況1を定数ポインタと呼ぶ.指向されるのは定数であり、constは指向されるオブジェクトを修飾する.しかし、ポインタ自体(a)は定数ではない.他の変数を指すことができる.すなわち
    int num = 10;
    int val = 20;
    const int *a = &num;
    // *a = 20;  //   .      *a    num  
    num = 11;  //   
    a = &val;  //   

    ケース2をポインタ定数と呼ぶ.ポインタは定数です.constはポインタ自体を修飾する.したがって、ポインタ自体は変えることはできないが、指し示すオブジェクトは変えることができる.
    int num = 10;
    int val = 20;
    int *const a = &num;
    a* = 11; //   
    // a = &val; //   

    最上位const:ポインタにとって、修飾ポインタ自体のconstは最上位constであり、修飾が指すオブジェクトは最上位constである.次のようになります.
    int * const a;  // const        ,  const
    const int *a;  // const          ,   const

    より一般的に、最上位constは、算術タイプ、クラス、ポインタなど、任意のオブジェクトが定数であることを表すことができる.下位constはポインタや参照などの複合タイプの基本タイプ部分に関係する.特に、ポインタタイプは、最上位のconstであってもよいし、最下位のconstであってもよい点が他のタイプと比較する明らかに異なる.参照を宣言するためのconstはいずれも最下位のconstである.
    int i = 0;
    int *const pi = &i;  //    const
    const int ci = 42; //    const
    const int *p2 = &i;  //    const
    const int &r = ci;  //         const      const

    typedef
    typedef char *pstring;
    const pstring cstr;  // const       
          const char *cstr; 
    

    複雑な声明の理解規則:右左の法則は変数名から見て、まず右に行って、それから左に行って、括弧にぶつかって読む方向を変えます;括弧内の分析が完了すると括弧から飛び出すか、右から左の順序で分析が完了するまでループします.
    次のようになります.
    int (*func[5])(int *);

    funcは5つの要素を含む配列であり、配列要素はintを返す値、パラメータはintポインタの関数である.
    auto
    a.autoは最上位constを無視し、最下位constを保持する.次のようになります.
    int num = 10;
    const int *a = &num;
    auto b = a;
    // *b = 111;    , b    const int* b;
    
    
    const int cnum = 11;   
    auto c = cnum;   //   const   ,    int
    c = 12;  //   

    b.推定されるautoタイプが最上位constである場合、明確に指摘する必要があります.
    int num = 10;
    const auto p = &num;
    
    int val = 11;
    // p = &val;    , p  const     const

    c. auto &
    const int ci = 10;
    auto & b = ci;
    // b = 11;   , b  ci   ,  ci   .

    decltype TODO
    decltype((var)); 二重カッコの結果は常に参照されます.
    転載先:https://www.cnblogs.com/daihanlong/p/10242053.html