Ada では、数字を区切るためにアンダースコアを使用して数字を書くことができるため、読みやすさが大幅に向上します。例: 1_000_000 (1000000 に相当) C++ にも同様の方法はありますか?
編集: これはソース コードに関する質問であり、I/O に関する質問ではありません。
Ada では、数字を区切るためにアンダースコアを使用して数字を書くことができるため、読みやすさが大幅に向上します。例: 1_000_000 (1000000 に相当) C++ にも同様の方法はありますか?
編集: これはソース コードに関する質問であり、I/O に関する質問ではありません。
現在、これを行う方法はありません。ただし、桁区切り記号を導入する提案があります (N3499)。ただし、セパレータとして使用する文字をまだ選択していません。現在の提案は次のとおりです。
4 815 162 342
4`815`162`342
4'815'162'342
4_815_162_342
残念ながら、提案に記載されているように、それらはすべて問題を抱えています。
ユーザー定義のリテラルを使用して、ハッキーなアプローチを取ることができます。
long long operator "" _s(const char* cstr, size_t)
{
std::string str(cstr);
str.erase(std::remove(str.begin(), str.end(), ','), str.end());
return std::stoll(str);
}
int main()
{
std::cout << "4,815,162,342"_s << std::endl;
}
これは出力されます:
4815162342
指定されたリテラルからすべてのコンマを削除し、整数に変換するだけです。
int main()
{
int x = 1e6;
}
探しているものはimbue()
、適切なロケール ファセット (この場合はnum_put ) で I/O ストリームを ing することで完全に可能です。
(これは、I/O について話していることを前提としています。ソース自体について話している場合は、C++11 の時点では不可能です。)