这些指令在C ++中的功能是什么?

时间:2015-03-27 19:04:48

标签: c++

我是编程新手,尤其是C ++语言。

我想知道每个Talimte的左右工作是什么......

特别是编译器在线上的工作

cout << setw (20) << right << setw (20) << left;

指令的工作

cin >> setw (20)

所以我需要帮助。

1 个答案:

答案 0 :(得分:2)

std::coutstd::ostream类的一个实例。它为不同的数据类型提供了许多operator<<()实现,包括一些函数类型。

std::cinstd::istream类的一个实例。它为不同的数据类型提供了许多operator>>()实现,包括一些函数类型。

所有operator<<()operator>>()实现都返回对要调用的流对象的引用。这允许将多个流操作链接到单个语句中。

std::setw()函数返回一个I / O操纵器对象,然后可以将其传递给operator<<()operator>>()。该对象会记住用户输入值,并将其传递给调用它的任何流对象的width()方法。

std::left()std::right()函数也是流I / O操纵器。它们不会将用户输入作为参数,因此它们可以按原样传递给operator<<()operator>>()(它们不返回操纵器对象)来调用流setf()方法

所以,行:

cout << setw (20) << right << setw (20) << left;

基本上是这样做的:

... manip = setw(20); // where ... is a compiler-defined type
ostream &temp = cout.operator<<(manip); // calls cout.width(20)
temp.operator<<(&right); // calls temp.setf(std::ios_base::right, std::ios_base::adjustfield)
manip = setw(20);
temp.operator<<(manip); // calls temp.width(20)
temp.operator<<(&left); // calls temp.setf(std::ios_base::left, std::ios_base::adjustfield)

同样,行:

cin >> setw (20)

基本上是这样做的:

... manip = setw(20);
cin.operator>>(manip); // calls cin.width(20)