Есть ли какая-то причина, по которой у потока cout установлен флаг std::ios_base::skipws?
cout
имеет флаги std::ios_base::skipws
а также std::ios_base::dec
установлен по умолчанию
Вы можете проверить это с помощью кода:
#include <iostream>
#include <string>
using namespace std;
int main()
{
ios_base::fmtflags flags = cout.flags();
string sflags;
if( flags & ios_base::skipws ) sflags += "skipws";
if( flags & ios_base::unitbuf ) sflags += sflags.empty() ? "unitbuf" : " unitbuf";
if( flags & ios_base::uppercase ) sflags += sflags.empty() ? "uppercase" : " uppercase";
if( flags & ios_base::showbase ) sflags += sflags.empty() ? "showbase" : " showbase";
if( flags & ios_base::showpoint ) sflags += sflags.empty() ? "showpoint" : " showpoint";
if( flags & ios_base::showpos ) sflags += sflags.empty() ? "showpos" : " showpos";
if( flags & ios_base::left ) sflags += sflags.empty() ? "left" : " left";
if( flags & ios_base::right ) sflags += sflags.empty() ? "right" : " right";
if( flags & ios_base::internal ) sflags += sflags.empty() ? "internal" : " internal";
if( flags & ios_base::dec ) sflags += sflags.empty() ? "dec" : " dec";
if( flags & ios_base::oct ) sflags += sflags.empty() ? "oct" : " oct";
if( flags & ios_base::hex ) sflags += sflags.empty() ? "hex" : " hex";
if( flags & ios_base::scientific ) sflags += sflags.empty() ? "scientific" : " scientific";
if( flags & ios_base::fixed ) sflags += sflags.empty() ? "fixed" : " fixed";
if( flags & ios_base::hexfloat ) sflags += sflags.empty() ? "hexfloat" : " hexfloat";
if( flags & ios_base::boolalpha ) sflags += sflags.empty() ? "boolalpha" : " boolalpha";
if( flags & ios_base::_Stdio ) sflags += sflags.empty() ? "_Stdio" : " _Stdio";
cout << "Standard flags from cout stream: " << sflags << endl;
}
Ясно флаг std::ios_base::skipws
не имеет значения для кут.
2 ответа
Флаги и их настройки по умолчанию наследуются от std::ios_base
(ну, собственно, настройки определены для std::basic_ios<cT, Traits>
; значения по умолчанию определены в 27.5.5.2 [basic.ios.cons]), общем базовом классе потоков ввода и вывода. Флаги являются общими, если поток наследуется как от входного, так и от выходного потоков. Есть другие флаги, которые не имеют большого смысла ни для входных, ни для выходных потоков.
skipws
флаг устанавливается во всех стандартных потоках при инициализации. Не просто std::cout
, Это имеет столько же смысла для std::cout
как для любого другого потока. Вы можете отключить его с noskipws
если ты так ненавидишь это.