条項1:pointersとreferencesを細かく区別する
**印象ノート:pointersとreferencesの違いを説明し、適切な使用タイミングを教えてあげます.**
まず、null referenceというものはなく、referenceは常にオブジェクトを表す必要があります.別の角度から言えば、この変数が常にオブジェクトを表す必要がある場合、つまりあなたの設計がこの変数をnullにすることを許可していない場合は、referenceを使用する必要があります.
まず状況を見てみましょう.
このコードはプログラムの結果を予想できない(C++は定義されていない)ので、「referenceがnullになる」可能性は永遠に考慮されません.
referenceは必ずオブジェクトを表すため、C++はreferencesに初期値が必要です.
しかしpointersにはこのような制限はありません.
「null referenceというものはありません」は、pointersを使用するよりもreferencesを使用する方が効率的である可能性があります.これは、referenceを使用する前に有効性をテストする必要がないためです.
pointersを使用する場合は、通常nullであるかどうかをテストする必要があります.
Pointersとreferencesの間のもう一つの重要な違いは、pointersが別のオブジェクトを指すように再割り当てられ、referenceは常に最初に得られたオブジェクトを指すことです.
一般的に、pointerは、「オブジェクトを指さない」可能性や「異なる時間に異なるオブジェクトを指さす」能力を考慮する場合に使用されます.「常にオブジェクトを表す」と判断し、「オブジェクトを表すと変更できない」と判断した場合はreferenceを選択します.
最後に、本の中で一つの結論を下した.
何かを指す必要があることを知っていて、他のものを指すことを決して変えないか、オペレータを実現して文法的な需要がpointerで達成できない場合は、referenceを選択する必要があります.その他の場合はpointersを採用してください.
まず、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を採用してください.