2

setw マニピュレータの宣言を説明してくれる人はいますか? 私はそれを理解しようとして完全に吹き飛ばされました.! iomanip での setw の宣言は次のとおりです。

 smanip setw(int)

スマニップって何?std::cout << setw(10) << "Hai" を与えるとどうなるか [出力が setw によって実際にどのように影響されるか、つまり内部で発生するアクションを知りたい)

4

2 に答える 2

4

smanip実装定義型です。ライブラリは、ジョブが完了する限り、それを好きなものに定義または型定義できます。

10実際には、(a) 実行される操作と、(b)この操作で使用される引数を表す何らかの構造になります。また、操作を実行する関数がある場合とない場合があります。これは、実装で がどのように定義されているかoperator<<(ostream &, smanip)、または必要なオペランドの型をキャッチするための同様のオーバーロードに応じて異なります。調べるために実装をチェックしていません。

出力がどのように影響を受けるかについては、my_stream << setw(10)を呼び出すのと同じ効果をストリームに与えるように定義されていますmy_stream.width(10)。したがって、operator<<オーバーロードにより、実装固有の方法で確実に発生します。パラメーター化されていないストリーム マニピュレーターのオペレーター オーバーロードは、特にマニピュレーターを呼び出すように定義されていますが、smanip実装にはもう少し自由度があります。

于 2011-01-11T15:37:15.683 に答える
0

setw(int)それ自体は何も変更しません。ストリームの動作を変更するために使用できるストリーム マニピュレータ (smanip) を返すだけです。

// setw example
#include <iostream>
#include <iomanip>
using namespace std;

int main () {
  cout << setw (10);
  cout << 77 << endl;
  return 0;
}
于 2011-01-11T15:18:24.520 に答える