2

私はC++の学習を始めました。この言語は素晴らしいと思いますが、学習過程で困惑することはほとんどありません。この例では:

cout << setiosflags(ios::fixed) << setiosflags(ios::showpoint);

この例では、なしsetiosflags(ios::...)で入力しただけでプログラムが同じことを行うのに、なぜ全体を入力するのでしょうか?showpointsetiosflags

2 番目の質問は簡単です。次の場合:

int x=0;
cin>>x;

int後で とは異なる値に変更する場合、なぜ の値を定義するの0でしょうか?

4

3 に答える 3

0

オプションの柔軟な言語が提供するため、setiosflgas以下のようにまたはを使用してマニピュレータを設定できます。

float y= 1.45;
std::cout << std::fixed<<std::showpoint<<y;

変数の初期化を主張する理由は、C++ 11 より前では、これらの初期化されていない変数は、値を設定するまでガベージ値を保持できるためです。また、望ましくない問題やバグが発生する可能性があります。そのため、変数を定義するときは常に変数を初期化することをお勧めします。

C++11 以降、次のように明示的なコンストラクターを使用すると、基本的なデータ型はすべてゼロに初期化されます。

int i2 = int(); // initialized with zero 
int i3{}; // initialized with zero (since C + + 11)
于 2015-05-18T19:42:07.243 に答える
-1
  1. ストリーム マニピュレータstd::setiosflags(ios_base::fmtflags mask)- は、 parameter で指定されたフォーマット フラグを設定する関数ですmaskバイナリ AND :を使用して、複数のフラグに同時に使用できます&。属するクラスの完全な機能を提供するために存在する可能性があります。今あなたの質問に関して:

フラグ (メンバー) に直接アクセスできる場合は、わざわざ関数 (セッター) を使用する必要はありません。

してはいけない理由が思いつきません。ただし、manipulatorsはグローバル関数であり、これらの定数ios_base::fmtflagsはメンバー定数であることに注意してください。マニピュレータの詳細については、これを確認してください。

  1. 2 番目の質問について: 値を割り当てる前に、誤って使用した場合に未定義の動作を回避するために、定義時に変数を初期化します。ローカル変数は初期化が必要です。グローバル変数はデフォルトで初期化されます。
于 2015-05-18T20:54:31.067 に答える