Đoạn mã sau cung cấp các kết quả khác nhau với trình biên dịch g ++ 7 và Apple clang ++. Tôi đã chạy vào một lỗi trong clang trong sự liên kết của đầu ra bool khi std::boolalpha
được sử dụng, hoặc tôi đã làm cho một sai lầm?Tại sao std :: boolalpha bỏ qua chiều rộng trường khi sử dụng tiếng kêu?
#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;
}
Sự khác biệt là:
// 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)
sự khác biệt là gì? Cảm ơn bạn Chiel đã cập nhật. Tôi có thể tái sản xuất với Clang 6. – gsamaras
in ra đặt trong câu hỏi quá. viết kết quả: – saeed
@gsamaras. Tôi hơi chỉnh sửa ví dụ để hiển thị tốt hơn những gì xảy ra sai. – Chiel