tôi in một bool
tới luồng ra như thế này:C++ in boolean, những gì được hiển thị?
#include <iostream>
int main()
{
std::cout << false << std::endl;
}
Liệu tiêu chuẩn đòi hỏi một kết quả cụ thể trên dòng (ví dụ 0
cho false
)?
tôi in một bool
tới luồng ra như thế này:C++ in boolean, những gì được hiển thị?
#include <iostream>
int main()
{
std::cout << false << std::endl;
}
Liệu tiêu chuẩn đòi hỏi một kết quả cụ thể trên dòng (ví dụ 0
cho false
)?
Luồng tiêu chuẩn có cờ boolalpha
xác định nội dung được hiển thị - khi sai, chúng sẽ hiển thị là 0
và 1
. Khi đúng, chúng sẽ hiển thị là false
và true
.
Ngoài ra còn có một std::boolalpha
thao túng để đặt cờ, vì vậy đây:
#include <iostream>
#include <iomanip>
int main() {
std::cout<<false<<"\n";
std::cout << std::boolalpha;
std::cout<<false<<"\n";
return 0;
}
... sản xuất ra như:
0
false
Đối với những gì nó có giá trị, từ thực tế sản xuất khi boolalpha
là được đặt thành true được bản địa hóa - tức là, <locale>
có một danh mục num_put
xử lý chuyển đổi số, vì vậy nếu bạn truyền một luồng có đúng ngôn ngữ, nó có thể/sẽ in ra true
và false
khi chúng được thể hiện bằng ngôn ngữ đó. Ví dụ,
#include <iostream>
#include <iomanip>
#include <locale>
int main() {
std::cout.imbue(std::locale("fr"));
std::cout << false << "\n";
std::cout << std::boolalpha;
std::cout << false << "\n";
return 0;
}
... và ít nhất về mặt lý thuyết (giả sử biên dịch/thư viện tiêu chuẩn của bạn chấp nhận "fr" như một định danh cho "Pháp") nó có thể in ra faux
thay vì false
. Tuy nhiên, tôi nên thêm rằng hỗ trợ thực sự cho điều này là không đồng đều ở mức tốt nhất - ngay cả thư viện Dinkumware/Microsoft (thường khá tốt về mặt này) in false
cho mọi ngôn ngữ tôi đã kiểm tra.
Tên được sử dụng được xác định trong một khía cạnh numpunct
, vì vậy nếu bạn thực sự muốn chúng in chính xác cho ngôn ngữ cụ thể, bạn có thể tạo một khía cạnh numpunct
để làm điều đó. Ví dụ, một trong đó (tôi tin) là ít nhất một cách hợp lý chính xác cho Pháp sẽ trông như thế này:
#include <array>
#include <string>
#include <locale>
#include <ios>
#include <iostream>
class my_fr : public std::numpunct<char> {
protected:
char do_decimal_point() const { return ','; }
char do_thousands_sep() const { return '.'; }
std::string do_grouping() const { return "\3"; }
std::string do_truename() const { return "vrai"; }
std::string do_falsename() const { return "faux"; }
};
int main() {
std::cout.imbue(std::locale(std::locale(), new my_fr));
std::cout << false << "\n";
std::cout << std::boolalpha;
std::cout << false << "\n";
return 0;
}
Và kết quả là (như bạn có thể mong đợi):
0
faux
: khi std :: boolalpha có thể được sử dụng để cho phép in" true " hoặc "sai" thay vì 0 hoặc 1, bạn có thể sử dụng lệnh std :: noboolalpha để làm điều ngược lại (in 0 hoặc 1) một lần nữa –
Đó có phải là 'mới' rò rỉ bộ nhớ không? – Creep4Play
@ Creep4Play: Không - theo mặc định, bạn đang cung cấp quyền sở hữu của các khía cạnh cho miền địa phương, sẽ tự động hủy nó khi ngôn ngữ bị hủy. –
0 sẽ được in.
Giống như C++ đúng đề cập đến và sai đề cập đến .
Trong trường hợp, bạn muốn in sai thay vì , sau đó bạn phải thiết lập định dạng cờ boolalpha cho dòng str.
Khi cờ định dạng boolalpha được đặt, giá trị bool được chèn/trích xuất bằng cách trình bày văn bản của chúng: đúng hoặc sai, thay vì giá trị tích phân.
#include <iostream>
int main()
{
std::cout << std::boolalpha << false << std::endl;
}
đầu ra:
false
Tại sao bạn không thử? –
Chúng ta nên đóng cái này như thế nào? –
Gợi ý: nó được đảm bảo để in cùng một điều trên mỗi trình biên dịch phù hợp. – chris