मानक धाराओं में boolalpha
ध्वज है जो निर्धारित करता है कि क्या प्रदर्शित होता है - जब यह गलत होता है, तो वे 0
और 1
के रूप में प्रदर्शित होंगे। जब यह सच होता है, तो वे false
और true
के रूप में प्रदर्शित होंगे।
वहाँ भी इस है ध्वज सेट करने के लिए एक std::boolalpha
जोड़तोड़, तो:
#include <iostream>
#include <iomanip>
int main() {
std::cout<<false<<"\n";
std::cout << std::boolalpha;
std::cout<<false<<"\n";
return 0;
}
... पैदा करता है उत्पादन की तरह:
0
false
क्या इसके लायक है के लिए, वास्तविक शब्द का उत्पादन किया boolalpha
है जब सत्य पर सेट किया गया है - <locale>
में num_put
श्रेणी है जो संख्यात्मक रूपांतरणों को संभालती है, इसलिए यदि आप सही लोकेल के साथ एक स्ट्रीम प्राप्त करते हैं, तो यह true
औरप्रिंट कर सकता है 210 के रूप में वे उस लोकेल में प्रतिनिधित्व कर रहे हैं। उदाहरण के लिए,
#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;
}
... और कम से कम सिद्धांत रूप में (यह मानते हुए अपने संकलक/मानक पुस्तकालय "fr" को स्वीकार करने के लिए "फ्रेंच" एक पहचानकर्ता के रूप में) यह पता faux
बजाय false
मुद्रित हो सकता है। हालांकि, मुझे यह जोड़ना चाहिए कि इसके लिए असली समर्थन असमान है - यहां तक कि डिनकुमवेयर/माइक्रोसॉफ्ट लाइब्रेरी (आमतौर पर इस संबंध में काफी अच्छा) प्रिंट की गई प्रत्येक भाषा के लिए false
प्रिंट करता है।
उपयोग किए जाने वाले नाम numpunct
पहलू में परिभाषित किए गए हैं, इसलिए यदि आप वास्तव में उन्हें विशेष भाषा के लिए सही ढंग से प्रिंट करना चाहते हैं, तो आप ऐसा करने के लिए numpunct
पहलू बना सकते हैं। उदाहरण के लिए, एक ही है कि (मेरा मानना है कि) कम से कम यथोचित फ्रेंच के लिए सटीक है इस प्रकार दिखाई देगा:
#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;
}
और परिणाम है (जैसा कि आप शायद उम्मीद थी):
0
faux
क्यों आप भी इसे आजमाना नहीं है? –
हमें इसे कैसे बंद करना चाहिए? –
संकेत: यह प्रत्येक अनुरूप कंपेलर पर एक ही चीज़ मुद्रित करने की गारंटी है। – chris