iostreams操纵者命令

Geo*_*iou 4 c++ iostream manipulators

我不理解下面的表达式中的逻辑,虽然它完美地工作:

cout << left << setw(6) << "hello" << "there." ; 
Run Code Online (Sandbox Code Playgroud)

前面的代码正确输出了我的期望: hello there.

我的逻辑是:

cout << "hello" << left << setw(6) << "there."; 
Run Code Online (Sandbox Code Playgroud)

但是它输出了一些意想不到的东西:hellothere.我的期望是"有"的第一个字符"t"在输出区域的第7列之后是6列宽度之后.换句话说,我的概念是"left setw(n)"应该表示"输出区域中第一个的n列(空格)",就像一些带有编号列的数据表格一样,便于查找数据.

你能解释一下吗?

Ker*_* SB 5

setw输入输出流机器人适用于下一个是输出项目,仅该项目.因此在第一个片段中,"hello"使用"left,field width 6"进行修改,从而产生以下输出:

|h|e|l|l|o| |
Run Code Online (Sandbox Code Playgroud)

默认情况下,填充字符是space(' '),这是没有更多输入数据且尚未达到字段宽度时的输出.

在第二个片段中,仅"there."操作项目.由于它已经包含六个输出字符,因此操纵器无效.