C ++ 20'deki biçimlendirme kitaplığı: Biçim dizisindeki ayrıntılar
Son makalemde “C ++ 20'deki Biçimlendirme Kitaplığı:” Biçim Halkası “Format format formatının bazı özelliklerini sundum. Bugün antlaşmayı bitirdim.
Rainer Grimm yıllardır yazılım mimarı, ekip ve eğitim müdürü olarak çalıştı. C ++ programlama dilleri, Python ve Haskell hakkında makaleler yazmayı seviyor, ancak uzman konferanslarla konuşmayı da seviyor. Modern C ++ blogunda, C ++ tutkusuyla yoğun bir şekilde ilgileniyor.
Bugünün makalesinde, formatın formatının genişliği, doğruluğu ve veri türü üzerine yazacağım. Kimlik konusu hakkında daha fazla bilgi edinmek istiyorsanız, doldurma dolguları, oryantasyon, işaretler ve alternatif formda, önceki makalemi okuyun: “C ++ 20'deki biçimlendirme kitaplığı: Biçim Yüzüğü”.
Genişlik ve hassasiyet
Bir konunun genişliğini ve doğruluğunu belirlemek mümkündür. Genişlik, mobil tepe sayıları ve dize zincirlerinde sayılara ve doğruluğa uygulanabilir. Mobil tepe sayıları durumunda, doğruluk biçimlendirmenin doğruluğunu gösterir; Şaşırtıcı zincirlerde, doğruluk kaç karakterin kullanıldığını ve sonunda karakterin zincirinin nasıl kesintiye uğradığını gösterir. Doğruluk dizenin uzunluğundan büyükse, bunun dize üzerinde bir etkisi yoktur.
// formatWidthPrecision.cpp
#include <format>
#include <iostream>
#include <string>
int main() {
int i = 123456789;
double d = 123.456789;
std::cout << "---" << std::format("{}", i) << "---n";
std::cout << "---" << std::format("{:15}", i)
<< "---n"; // (w = 15)
std::cout << "---" << std::format("{:}", i)
<< "---n"; // (w = 15) // (1)
std::cout << 'n';
std::cout << "---" << std::format("{}", d) << "---n";
std::cout << "---" << std::format("{:15}", d)
<< "---n"; // (w = 15)
std::cout << "---" << std::format("{:}", d)
<< "---n"; // (w = 15)
std::cout << 'n';
std::string s= "Only a test";
std::cout << "---" << std::format("{:10.50}", d)
<< "---n"; // (w = 10, p = 50) // (2)
std::cout << "---" << std::format("{:{}.{}}", d, 10, 50)
<< "---n"; // (w = 10, p = 50) // (3)
std::cout << "---" << std::format("{:10.5}", d)
<< "---n"; // (w = 10, p = 5)
std::cout << "---" << std::format("{:{}.{}}", d, 10, 5)
<< "---n"; // (w = 10, p = 5)
std::cout << 'n';
std::cout << "---" << std::format("{:.500}", s)
<< "---n"; // (p = 500) // (4)
std::cout << "---" << std::format("{:.{}}", s, 500)
<< "---n"; // (p = 500) // (5)
std::cout << "---" << std::format("{:.5}", s)
<< "---n"; // (p = 5)
}
. w-S Kaynak kodundaki işaret genişliği temsil eder; Aynı şekilde p-S doğruluğu için işaret.
Programla ilgili bazı ilginç gözlemler: Genişlik bir yedek alanı (1) tarafından belirtilirse başka boşluk eklenmez. Görüntülenen uzunluğundan daha büyük bir doğruluk kullanılırsa double (2 ve 3), görüntülenen değerin uzunluğu doğruluğu yansıtır. Bu gözlem bir ip için geçerli değildir (4 ve 5).
Ek olarak, genişlik ve doğruluk parametrelendirilebilir.
// formatWidthPrecisionParametrized.cpp
#include <format>
#include <iostream>
int main() {
std::cout << 'n';
double doub = 123.456789;
std::cout << std::format("{:}n", doub); // (1)
std::cout << 'n';
for (auto precision: {3, 5, 7, 9}) {
std::cout << std::format("{:.{}}n",
doub,
precision); // (2)
}
std::cout << 'n';
int width = 10;
for (auto precision: {3, 5, 7, 9}) {
std::cout << std::format("{:{}.{}}n",
doub,
width,
precision); // (3)
}
std::cout << 'n';
Program formatWidthPrecisionParametrized.cpp Çiftini koy doub Varsayılan ayar farklı şekillerde kullanılır. (1). (2) Doğruluğu 3'ten 9'a kadar değiştirir. Biçim halkasının son konusu girer {} formatın formatının {:.{}}. Son olarak, (3) 'de görüntülenen çift değerlerin genişliği 10'a ayarlanmıştır.
Veri türü
Genel olarak, derleyici kullanılan değer türünü türetir. Ancak bazen veri türünü belirtmek istersiniz. Bunlar en önemli veri türleridir:
Sıyrık: s
Tamamen:
double d = 123.456789;
std::format("{}", &d); // ERROR
std::format("{}", static_cast<void*>(&d)); // okay
std::format("{}", static_cast<const void*>(&d)); // okay
std::format("{}", nullptr); // okay
Veri türlerini kullanabilirsiniz int Sadece farklı bir sayı sisteminde temsil eder.
// formatType.cpp
#include <format>
#include <iostream>
int main() {
int num{2020};
std::cout << "default: " << std::format("{:}", num)
<< 'n';
std::cout << "decimal: " << std::format("{:d}", num)
<< 'n';
std::cout << "binary: " << std::format("{:b}", num)
<< 'n';
std::cout << "octal: " << std::format("{
}", num)
<< 'n';
std::cout << "hexadecimal: " << std::format("{:x}", num)
<< 'n';
}
Sırada ne var?
Şimdiye kadar temel veri ve dizeler türlerini biçimlendirdim. Tabii ki, kişiselleştirilmiş türler de oluşturulabilir. Bu bir sonraki makalemin konusu olacak.
(RME)
C ++ 20'deki biçimlendirme kitaplığı: Biçim dizisindeki ayrıntılar
Son makalemde “C ++ 20'deki Biçimlendirme Kitaplığı:” Biçim Halkası “Format format formatının bazı özelliklerini sundum. Bugün antlaşmayı bitirdim.

Rainer Grimm yıllardır yazılım mimarı, ekip ve eğitim müdürü olarak çalıştı. C ++ programlama dilleri, Python ve Haskell hakkında makaleler yazmayı seviyor, ancak uzman konferanslarla konuşmayı da seviyor. Modern C ++ blogunda, C ++ tutkusuyla yoğun bir şekilde ilgileniyor.

Bugünün makalesinde, formatın formatının genişliği, doğruluğu ve veri türü üzerine yazacağım. Kimlik konusu hakkında daha fazla bilgi edinmek istiyorsanız, doldurma dolguları, oryantasyon, işaretler ve alternatif formda, önceki makalemi okuyun: “C ++ 20'deki biçimlendirme kitaplığı: Biçim Yüzüğü”.
Genişlik ve hassasiyet
Bir konunun genişliğini ve doğruluğunu belirlemek mümkündür. Genişlik, mobil tepe sayıları ve dize zincirlerinde sayılara ve doğruluğa uygulanabilir. Mobil tepe sayıları durumunda, doğruluk biçimlendirmenin doğruluğunu gösterir; Şaşırtıcı zincirlerde, doğruluk kaç karakterin kullanıldığını ve sonunda karakterin zincirinin nasıl kesintiye uğradığını gösterir. Doğruluk dizenin uzunluğundan büyükse, bunun dize üzerinde bir etkisi yoktur.
- Genişlik: Pozitif bir ondalık sayıya veya yedek alanınız olabilir ({} VEYA {n}) Kullanmak. Belirtilirse, ver n minimum genişlik.
- Hassasiyet: Bir nokta (.) Ve ardından negatif olmayan bir ondalık sayı veya bir yedek alanı kullanmak mümkündür.
// formatWidthPrecision.cpp
#include <format>
#include <iostream>
#include <string>
int main() {
int i = 123456789;
double d = 123.456789;
std::cout << "---" << std::format("{}", i) << "---n";
std::cout << "---" << std::format("{:15}", i)
<< "---n"; // (w = 15)
std::cout << "---" << std::format("{:}", i)
<< "---n"; // (w = 15) // (1)
std::cout << 'n';
std::cout << "---" << std::format("{}", d) << "---n";
std::cout << "---" << std::format("{:15}", d)
<< "---n"; // (w = 15)
std::cout << "---" << std::format("{:}", d)
<< "---n"; // (w = 15)
std::cout << 'n';
std::string s= "Only a test";
std::cout << "---" << std::format("{:10.50}", d)
<< "---n"; // (w = 10, p = 50) // (2)
std::cout << "---" << std::format("{:{}.{}}", d, 10, 50)
<< "---n"; // (w = 10, p = 50) // (3)
std::cout << "---" << std::format("{:10.5}", d)
<< "---n"; // (w = 10, p = 5)
std::cout << "---" << std::format("{:{}.{}}", d, 10, 5)
<< "---n"; // (w = 10, p = 5)
std::cout << 'n';
std::cout << "---" << std::format("{:.500}", s)
<< "---n"; // (p = 500) // (4)
std::cout << "---" << std::format("{:.{}}", s, 500)
<< "---n"; // (p = 500) // (5)
std::cout << "---" << std::format("{:.5}", s)
<< "---n"; // (p = 5)
}
. w-S Kaynak kodundaki işaret genişliği temsil eder; Aynı şekilde p-S doğruluğu için işaret.
Programla ilgili bazı ilginç gözlemler: Genişlik bir yedek alanı (1) tarafından belirtilirse başka boşluk eklenmez. Görüntülenen uzunluğundan daha büyük bir doğruluk kullanılırsa double (2 ve 3), görüntülenen değerin uzunluğu doğruluğu yansıtır. Bu gözlem bir ip için geçerli değildir (4 ve 5).

Ek olarak, genişlik ve doğruluk parametrelendirilebilir.
// formatWidthPrecisionParametrized.cpp
#include <format>
#include <iostream>
int main() {
std::cout << 'n';
double doub = 123.456789;
std::cout << std::format("{:}n", doub); // (1)
std::cout << 'n';
for (auto precision: {3, 5, 7, 9}) {
std::cout << std::format("{:.{}}n",
doub,
precision); // (2)
}
std::cout << 'n';
int width = 10;
for (auto precision: {3, 5, 7, 9}) {
std::cout << std::format("{:{}.{}}n",
doub,
width,
precision); // (3)
}
std::cout << 'n';
Program formatWidthPrecisionParametrized.cpp Çiftini koy doub Varsayılan ayar farklı şekillerde kullanılır. (1). (2) Doğruluğu 3'ten 9'a kadar değiştirir. Biçim halkasının son konusu girer {} formatın formatının {:.{}}. Son olarak, (3) 'de görüntülenen çift değerlerin genişliği 10'a ayarlanmıştır.

Veri türü
Genel olarak, derleyici kullanılan değer türünü türetir. Ancak bazen veri türünü belirtmek istersiniz. Bunlar en önemli veri türleridir:
Sıyrık: s
Tamamen:
- b: İkili format
- B: Beğenmek bAncak temel önek 0B
- d: ondalık biçim
- o: Sekizinci format
- x: Onaltılık format
- X: Beğenmek xAncak temel önek 0X
- b, B, d, o, x, X: Tam sayılar
- s: true VEYA false
- b, B, d, o, x, X: Tam sayılar
- e: Üstel Biçim
- E: Beğenmek eAma üs ile E yazılı
- f, F: Virgül düzeltildi; Hassasiyet 6
- g, G: Hassas 6, ancak üs ile E yazılı
- p: Adresinin onaltılık yazımı
double d = 123.456789;
std::format("{}", &d); // ERROR
std::format("{}", static_cast<void*>(&d)); // okay
std::format("{}", static_cast<const void*>(&d)); // okay
std::format("{}", nullptr); // okay
Veri türlerini kullanabilirsiniz int Sadece farklı bir sayı sisteminde temsil eder.
// formatType.cpp
#include <format>
#include <iostream>
int main() {
int num{2020};
std::cout << "default: " << std::format("{:}", num)
<< 'n';
std::cout << "decimal: " << std::format("{:d}", num)
<< 'n';
std::cout << "binary: " << std::format("{:b}", num)
<< 'n';
std::cout << "octal: " << std::format("{
<< 'n';
std::cout << "hexadecimal: " << std::format("{:x}", num)
<< 'n';
}

Sırada ne var?
Şimdiye kadar temel veri ve dizeler türlerini biçimlendirdim. Tabii ki, kişiselleştirilmiş türler de oluşturulabilir. Bu bir sonraki makalemin konusu olacak.
(RME)