我是编程新手,尤其是C ++语言。
我想知道每个Talimte的左右工作是什么......
特别是编译器在线上的工作
cout << setw (20) << right << setw (20) << left;
指令的工作
cin >> setw (20)
所以我需要帮助。
答案 0 :(得分:2)
std::cout
是std::ostream
类的一个实例。它为不同的数据类型提供了许多operator<<()
实现,包括一些函数类型。
std::cin
是std::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)