gpt4 book ai didi

c++ - std::stringstream 的默认 `fill character` 是什么?

转载 作者:可可西里 更新时间:2023-11-01 18:35:53 24 4
gpt4 key购买 nike

它是实现定义的还是标准建议流的默认填充字符?

示例代码:

#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 错误。

最佳答案

根据 27.5.5.2 [basic.ios.cons] 第 3 段/表 128,流 s 的默认填充字符是 s.widen(' ') . 然而,s.widen(' ') 产生的字符取决于 std::locale as s.widen(c) 是(27.5.5.3 [basic.ios.members] 第 12 段):

std::use_facet<std::ctype<cT>>(s.getloc()).widen(c)

顺便说一句,当您只写入流并且有 no use of std::endl 时,您应该使用 std::ostringstream曾经。

关于c++ - std::stringstream 的默认 `fill character` 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20793433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com