C++Primer読解心得(第1章、第2章)


1.iostreamライブラリにはcinとcoutのほかにcerrとclogオブジェクトがあり、標準エラーstderrに出力されます.clogはcerrのバッファ付きバージョンです(ここ数年、誰も使ったことがありませんか?)
2.c++の各式には戻り値があり、入力オペレータ>>と出力オペレータ<<の戻り値はiostreamオブジェクト自体(cinやcoutなど)なので、長い列の連続入力や出力を書くことができます.
int a,b,c,d;
cin>>a>>b>>c>>d;
  >>     cin  ,     :
cin>>a;
cin>>b;
cin>>c;
cin>>d;

3.c++のコメントには//(コメント1行)と/**/(コメント1枚)の2種類が含まれており、//コメントが必要な各行を使用することをお勧めします./**/を使うと、真ん中に*/があるかもしれないとコードが乱れてしまうので、正直に//注釈を使ったほうがいいです.もう一つの仕事で出会った奇抜な注釈形式#if 0も、一度に注釈するものです.
#if 0
xxxxxxxxxxxx
xxxxxxxxxxxx
xxxxxxxxxxxxx
#endif

4.char 16_を追加tとchar 32_t 2つはunicode文字セットサービスの文字タイプであり、long longタイプを増加させ、nullptrを増加させてNULLの代わりにポインタに空の初期値を割り当てるために使用する.接頭辞と接尾辞が拡張されました(注意:これらは組み合わせて使用できます):
  :
u(unicode 16,char16_t)
U(unicode 32,char132_t)
L(   ,wchar_t)
u8(utf-8,char)
  :
u or U:  unsigned
l or L:     long,     long double
ll or LL:  long long(c++11     )
f or F:  float

5.charはsigned charである場合があり、unsigned charである場合があり、具体的にはコンパイラによって決定される.したがって、小さな整数が必要な場合はcharを使用しないでください.これはコンパイラに依存するため、signed charまたはunsigned charが必要であることを明確に指定する必要があります.
6.文字列フォント値の接続:複数の文字列フォント値の間に、スペース、タブ(/t)、改行(/n)のみが存在する場合、自動的に新しい文字列フォント値に接続されます.例:
   cout<<"This "
           "is "           
               "a "
           "cutted "
           "string!"
       <<endl;

This is a cutted stringが出力されます!(涙奔、javaの文字列加算よりずっといいです)
7.スラッシュの使用:c++プログラムでは、1行の最後の文字が'/'であれば('/'の後にスペースやタブを付けることはできません)、本行と次の行は同じ行として扱われます.注意:次の行にスペースやタブが含まれている場合も計算されますよ.つまり、上に書く必要があります(これはインデントIDEではあまり役に立ちません).例:
   cou/
   t<<"tes/
   t"</
   <endl;
   :
   cout<<"test"<<endl;

8.C++における変数の初期化には三つの方式がある:一、直接初期化;二、レプリケーション初期化;三、リスト初期化(c++11新規)
int val(1024);  //     (    ?)
int val =1024; //     (      ?)
int val = {1024};//     
T val{x,y}; //          ,        
return {x,y}; //      x y        (            )

9.初期化と代入の違い:C++では代入に等号を使用し、初期化にも等号を使用することが多いが、両者には違いがある.初期化とは、新しい変数を作成して初期値を与えることであり、付与値とは変数の元の値を消去し、新しい値を使用して置き換えることであり、両者はまったく異なる.
10.初期化の際、同じ文では、異なる変数の初期化はそれぞれ行わなければならないことに注意してください.例:
int val1 = val2 = 100; (  )
int val1 = 100, val2 = 100; (  )

11.変数のデフォルト初期化(グローバル変数とクラスメンバー変数):すべての括弧の外に定義されたグローバル変数がデフォルトで初期化されます.またc++11ではクラスのデータメンバーが初期値を人為的に指定していない場合はデフォルトで初期化される(思いやり~~Java万歳~).他のすべての変数はデフォルトで初期化されませんので、注意してください.