C++Primer(英語第5版)日記を読む-20200416

5795 ワード

前言
今日具体的に記録されているのはCompound Typeで、ポインタやリファレンスに関連しています.以前はシステムを見たことがありませんが、使うだけです.最近はシステム的に整理されています.
Compound Type(複合タイプ)
Compound typesとは?一般base typeに基づいて引用されるタイプです.
広く言えば、Declarationは一連のdeclaratorsに続くtypeであり、変数にbase typeに関連する(複合)タイプを命名し、付与する.
int &refVal = ival;

Here, int is the type, &refVal is declarators. Declaratorsは、前に述べたように、単純な変数名であってもよい.
Reference(参照)
参照とはobjectに別名を付けることです.私たちがreferenceをdefineすると、intiailizerは値をコピーするのではなく、この値の参照をバインド(bind)して過去にします.ポインタとは異なり、バインドすると、一生objectについていなければなりません.再バインドできません.
int ival = 1024;
int &refVal = ival;
int &refVal2; // error:        。

Reference変数の使い方はすべて元と一致していますが、操作refValの場合、実際にivalを操作していることが理解できます.したがって、参照を変更すると、元の変数に影響します.
特殊な例(const)などを除いて、一般的にReferenceはobjectにバインドするしかありませんが、literalと式にバインドすることはできません.
Pointers
Pointersはreferenceよりも広いです.
  • 初期化時にinitializedは不要
  • assignとcopyをやり直せる
  • The address-of operator (the & operator) is used to get the address of an object.
    int ival = 42;
    int *p = &ival;
    

    注意以下の4点Pointer特性
  • PointerがObjectを指すことができる
  • Pointerは解放された変数(野ポインタ)を指すことができる
  • Pointerは空に設定可能
  • Pointerが不正なアドレスを指すことができる(悪のSegement fault)
  • 参照を解くにはdereference operator(operator)を使用します.
    int ival = 42;
    int *p = &ival;
    cout << *p;
    

    Null pointer
    空のポインタはC++で使用できます.0nullptrNULLで表示されます.ポインタが空であれば、彼のconditionはfalseです.空でないポインタはtrueです.
    Void*ポインタ
    関数がどのタイプを返すか、または複数のタイプを返すか分からない場合に使用します.
    私の個人的な経験から、メモリを割り当てる関数(Cから継承されたmalloc)を使うことが多く、使う前にタイプ変換が必要です.Warningの主なソースです.
    奇妙なComponenttype declarationの使い方
    int i = 1024, *p = &i, &r = i;
    

    以上の例は,declaratorとinitializeを理解する集大成者である.ここでは2つの点に注意してください.
  • 前のinitializeの値は、1つのdeclarationで後から使用できる(前述).
  • 広範なdeclaration定義で、declratorが1つのbase typeに対応する異なるcompound typeであることを許可する.

  • それから新米の殺し屋で、私はその時ずっと理解していなかったので、今本の中で言及したのを見ました.
    int* p;
    int *p;
    

    以上の2つの言葉は,いずれも合法的で,少しも違いがない.cppではoperatorはnameに隣接しなくてもよいが,コンパイル時は同じ意味である.ここではタイプすなわちintとして理解することはできないが,実際にはpが全体(declarator)である.
    int* p1, p2; // p1 is pointer to int, while p2 is an int
    

    ぬいぐるみの針*ある基本タイプのポインタを意味する**ある基本タイプのポインタを意味するポインタ***ある基本タイプのポインタを意味するポインタ.生きてる!コードを書くハゲのソース:これは何層のポインタですか?まだ解は何回引用しますか.
    参照ポインタ
    参照(reference)はobjectではないので、ポインタ(pointer)はreferenceを指すことはできません.ただし、reference of pointerは可能です.
    int i = 42;
    int *p; // p is a pointer to t
    int *&r = p; // r is a reference to the pointer p
    r = &i;
    *r = 0;
    

    ここでは*&rのtype定義順序をどのように理解しますか?最良の方法は、nameに近づくほど先に作用することです.例えばここで*&はポインタの引用で、彼はまず引用しなければならないので、&もっと近いです.