c – 为什么std :: boolalpha在使用clang时会忽略字段宽度?

前端之家收集整理的这篇文章主要介绍了c – 为什么std :: boolalpha在使用clang时会忽略字段宽度?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码使用g 7编译器和Apple clang给出了不同的结果.当使用std :: boolalpha时,我是否遇到了bool输出对齐中的clang错误,或者我犯了错误
#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>

template<typename T>
void print_item(std::string name,T& item) {
    std::ostringstream ss;
    ss << std::left << std::setw(30) << name << "= " 
       << std::right << std::setw(11) << std::setprecision(5) 
       << std::boolalpha << item << " (blabla)" << std::endl;

    std::cout << ss.str();
}

int main() {
    int i = 34;
    std::string s = "Hello!";
    double d = 2.;
    bool b = true;

    print_item("i",i);
    print_item("s",s);
    print_item("d",d);
    print_item("b",b);

    return 0;
}

不同之处是:

// output from g++ version 7.2
i                             =          34 (blabla)
s                             =      Hello! (blabla)
d                             =           2 (blabla)
b                             =        true (blabla)
// output from Apple clang++ 8.0.0
i                             =          34 (blabla)
s                             =      Hello! (blabla)
d                             =           2 (blabla)
b                             = true   (blabla)

解决方法

在T.C.提到,这是 LWG 2703

No provision for fill-padding when boolalpha is set

N4582 subclause 25.4.2.2.2 [facet.num.put.virtuals] paragraph 6 makes
no provision for fill-padding in its specification of the behavIoUr
when
(str.flags() & ios_base::boolalpha) != 0.

结果我没有看到与Clang的解决方案.但请注意:

> libc完全实现了这一点.
> libstdc和MSVC应用填充和对齐.

PS:LWG代表图书馆工作组.

原文链接:https://www.f2er.com/c/118758.html

猜你在找的C&C++相关文章