C++Primer(英語第5版)日記を読む-20200416
5795 ワード
前言
今日具体的に記録されているのはCompound Typeで、ポインタやリファレンスに関連しています.以前はシステムを見たことがありませんが、使うだけです.最近はシステム的に整理されています.
Compound Type(複合タイプ)
Compound typesとは?一般base typeに基づいて引用されるタイプです.
広く言えば、Declarationは一連のdeclaratorsに続くtypeであり、変数にbase typeに関連する(複合)タイプを命名し、付与する.
Here,
Reference(参照)
参照とはobjectに別名を付けることです.私たちがreferenceをdefineすると、intiailizerは値をコピーするのではなく、この値の参照をバインド(bind)して過去にします.ポインタとは異なり、バインドすると、一生objectについていなければなりません.再バインドできません.
Reference変数の使い方はすべて元と一致していますが、操作
特殊な例(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.
注意以下の4点Pointer特性PointerがObjectを指すことができる Pointerは解放された変数(野ポインタ)を指すことができる Pointerは空に設定可能 Pointerが不正なアドレスを指すことができる(悪のSegement fault) 参照を解くにはdereference operator(operator)を使用します.
Null pointer
空のポインタはC++で使用できます.
Void*ポインタ
関数がどのタイプを返すか、または複数のタイプを返すか分からない場合に使用します.
私の個人的な経験から、メモリを割り当てる関数(Cから継承されたmalloc)を使うことが多く、使う前にタイプ変換が必要です.Warningの主なソースです.
奇妙なComponenttype declarationの使い方
以上の例は,declaratorとinitializeを理解する集大成者である.ここでは2つの点に注意してください.前のinitializeの値は、1つのdeclarationで後から使用できる(前述). 広範なdeclaration定義で、declratorが1つのbase typeに対応する異なるcompound typeであることを許可する.
それから新米の殺し屋で、私はその時ずっと理解していなかったので、今本の中で言及したのを見ました.
以上の2つの言葉は,いずれも合法的で,少しも違いがない.cppではoperatorはnameに隣接しなくてもよいが,コンパイル時は同じ意味である.ここではタイプすなわちintとして理解することはできないが,実際にはpが全体(declarator)である.
ぬいぐるみの針
参照ポインタ
参照(reference)はobjectではないので、ポインタ(pointer)はreferenceを指すことはできません.ただし、reference of pointerは可能です.
ここでは
今日具体的に記録されているのは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よりも広いです.
int ival = 42;
int *p = &ival;
注意以下の4点Pointer特性
int ival = 42;
int *p = &ival;
cout << *p;
Null pointer
空のポインタはC++で使用できます.
0
、nullptr
、NULL
で表示されます.ポインタが空であれば、彼のconditionはfalseです.空でないポインタはtrueです.Void*ポインタ
関数がどのタイプを返すか、または複数のタイプを返すか分からない場合に使用します.
私の個人的な経験から、メモリを割り当てる関数(Cから継承されたmalloc)を使うことが多く、使う前にタイプ変換が必要です.Warningの主なソースです.
奇妙なComponenttype declarationの使い方
int i = 1024, *p = &i, &r = i;
以上の例は,declaratorとinitializeを理解する集大成者である.ここでは2つの点に注意してください.
それから新米の殺し屋で、私はその時ずっと理解していなかったので、今本の中で言及したのを見ました.
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に近づくほど先に作用することです.例えばここで*&はポインタの引用で、彼はまず引用しなければならないので、&もっと近いです.