setw マニピュレータの宣言を説明してくれる人はいますか? 私はそれを理解しようとして完全に吹き飛ばされました.! iomanip での setw の宣言は次のとおりです。
smanip setw(int)
スマニップって何?std::cout << setw(10) << "Hai" を与えるとどうなるか [出力が setw によって実際にどのように影響されるか、つまり内部で発生するアクションを知りたい)
smanip
実装定義型です。ライブラリは、ジョブが完了する限り、それを好きなものに定義または型定義できます。
10
実際には、(a) 実行される操作と、(b)この操作で使用される引数を表す何らかの構造になります。また、操作を実行する関数がある場合とない場合があります。これは、実装で がどのように定義されているかoperator<<(ostream &, smanip)
、または必要なオペランドの型をキャッチするための同様のオーバーロードに応じて異なります。調べるために実装をチェックしていません。
出力がどのように影響を受けるかについては、my_stream << setw(10)
を呼び出すのと同じ効果をストリームに与えるように定義されていますmy_stream.width(10)
。したがって、operator<<
オーバーロードにより、実装固有の方法で確実に発生します。パラメーター化されていないストリーム マニピュレーターのオペレーター オーバーロードは、特にマニピュレーターを呼び出すように定義されていますが、smanip
実装にはもう少し自由度があります。
setw(int)
それ自体は何も変更しません。ストリームの動作を変更するために使用できるストリーム マニピュレータ (smanip) を返すだけです。
// setw example
#include <iostream>
#include <iomanip>
using namespace std;
int main () {
cout << setw (10);
cout << 77 << endl;
return 0;
}