条項1:pointersとreferencesを細かく区別する


**印象ノート:pointersとreferencesの違いを説明し、適切な使用タイミングを教えてあげます.**
まず、null referenceというものはなく、referenceは常にオブジェクトを表す必要があります.別の角度から言えば、この変数が常にオブジェクトを表す必要がある場合、つまりあなたの設計がこの変数をnullにすることを許可していない場合は、referenceを使用する必要があります.
まず状況を見てみましょう.
int *pc=0;  // pointer   null
int& rc=*pc;    // refere  nullpointer    
cout<

このコードはプログラムの結果を予想できない(C++は定義されていない)ので、「referenceがnullになる」可能性は永遠に考慮されません.
referenceは必ずオブジェクトを表すため、C++はreferencesに初期値が必要です.
string& rs; //  !references      

しかしpointersにはこのような制限はありません.
string *ps; //       ,  ,    

「null referenceというものはありません」は、pointersを使用するよりもreferencesを使用する方が効率的である可能性があります.これは、referenceを使用する前に有効性をテストする必要がないためです.
void printDouble(const double& rd)
{
    cout<//     rd,       double
}

pointersを使用する場合は、通常nullであるかどうかをテストする必要があります.
void printDouble(const double *pd)
{
    if(pd){ //     null pointer
        cout<//     rd,       double
    }
}

Pointersとreferencesの間のもう一つの重要な違いは、pointersが別のオブジェクトを指すように再割り当てられ、referenceは常に最初に得られたオブジェクトを指すことです.
string s1("Nancy");
string s2("Clancy");

string& rs=s1;  //rs  s1 
string *ps= &s1;    //ps  s1 
cout<//  Nancy 
cout<//  Nancy

rs=s2;  //rs    s1,  s1       "Clancy" 
cout<//  Clancy 
ps=&s2; //ps    s2,s1     
cout<//  Clancy 
cout<//  Clancy 

一般的に、pointerは、「オブジェクトを指さない」可能性や「異なる時間に異なるオブジェクトを指さす」能力を考慮する場合に使用されます.「常にオブジェクトを表す」と判断し、「オブジェクトを表すと変更できない」と判断した場合はreferenceを選択します.
最後に、本の中で一つの結論を下した.
何かを指す必要があることを知っていて、他のものを指すことを決して変えないか、オペレータを実現して文法的な需要がpointerで達成できない場合は、referenceを選択する必要があります.その他の場合はpointersを採用してください.