雑記——『C++プログラミング言語』

1609 ワード

1.クラス定義は#includeの使用によって異なるソースファイルで繰り返し表示され、一意の定義ルールに違反しない
 
2.classのconstメンバー関数はclassメンバー変数を変更できません
 
3.constまたは非constオブジェクトに対してconstメンバー関数を呼び出すことができ、constメンバー関数ではなく非constオブジェクトに対してのみp 205を呼び出すことができる
 
4.クラスXの非constメンバー関数では、thisのタイプはX*です.クラスXのconstメンバー関数でthisのタイプはconst X*p 206です
 
5.constまたは参照メンバーを含むクラスはデフォルトで構築できません.構造関数の初期式でp 218222を初期化する必要があります.
 
6.unionメンバーはコンストラクション関数とコンストラクション関数を持つことができませんか?p218
 
7.レプリケーションコンストラクション関数は、初期化されていないストレージ領域の初期化を完了し、レプリケーション付与演算子は、構造の良いオブジェクトを正しく処理する必要があります.付与演算子の一般的なポリシー:自己付与を防止し、古い要素を削除し、初期化し、新しい要素をコピーします.p220
 
stringについて
1.string反復器は範囲検査をしない.stringの下付き演算子[]は範囲検査を行わず,at()は範囲検査を行う.at()に範囲外アクセスするとout_of_range異常.P516
 
2.ポインタと配列の等価関係はstringに対して成立せず、sがstringであれば&s[0]とsが異なるP 516
 
3.stringのlength()とsize()は等価ですが、Cスタイルの0で終わる文字列を統計することはできません.P517
 
4.多くのストリング操作は、パラメータとして文字位置に文字数を加算します.与えられた位置が列のサイズより大きい場合、out_が放出されます.of_range異常、「大きすぎる」文字カウント値は単純にこの列の「残り」を取り出した文字として扱われ、異常は投げ出されません.P517
 
5.stringは単一文字で初期化できませんが、stringは単一文字で割り当てることができます.P519
string s = 'a'; //wrong
string s2;
s2 = 'a';        //OK

 
6.stringのdata()は文字配列を生成し、c_str()は,Cスタイル文字列,すなわち0を終端とする.stringには0を含めることができます
文字.すなわち0はstringでは終了フラグを表さない.??data()とc_str()で生成された文字列はバッファに格納され、stringの文字列表現を長期にわたって使用する場合はcopy()関数で配列にコピーできます. P520
char* c_string(const string& s)
{
       char* p = new char[s.length()+1];
       s.copy(p,s.length());
       p[s.length()]=0;
       return p;
}