Что такое символ заполнения по умолчанию std:: stringstream?
определена ли реализация или стандарты предлагают символ заполнения по умолчанию для потоков?
пример кода:
#include <iostream>
#include <iomanip>
#include <sstream>
int main ()
{
std::stringstream stream;
stream << std::setw( 10 ) << 25 << std::endl;
std::cout << stream.str() << std::endl;
}
С clang++ --stdlib=libstdc++
$ clang++ --stdlib=libstdc++ test.cpp
$ ./a.out | hexdump
0000000 20 20 20 20 20 20 20 20 32 35 0a 0a
000000c
$
С clang++ --stdlib=libc++
$ clang++ --stdlib=libc++ test.cpp
$ ./a.out | hexdump
0000000 ff ff ff ff ff ff ff ff 32 35 0a 0a
000000c
версия
$ clang++ --version
Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix
я смог исправить это с помощью std::setfill(' ')
, но мне любопытно узнать, является ли это clang
ошибка.
1 ответов
символ заливки по умолчанию для потока s
is s.widen(' ')
в соответствии с 27.5.5.2 [basic.усвн.минусы] пункт 3/Таблица 128. Какой характер является результатом s.widen(' ')
, однако, зависит от std::locale
as s.widen(c)
is (27.5.5.3 [basic.усвн.пользователи] пункт 12):
std::use_facet<std::ctype<cT>>(s.getloc()).widen(c)
кстати, вы должны использовать std::ostringstream
когда вы только пишете в поток, и есть использовать std::endl
никогда.