Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
C++ <iostream-klassen> , -functies en -operators ondersteunen geformatteerde tekenreeks-I/O. De volgende code laat bijvoorbeeld zien hoe u cout
kunt instellen om een geheel getal op te maken voor uitvoer in hexadecimale notatie. Ten eerste wordt de huidige status opgeslagen om deze later opnieuw in te stellen, omdat zodra de opmaakstatus is doorgegeven cout
, deze op die manier blijft totdat deze is gewijzigd. Het is niet alleen van toepassing op die ene regel code.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
ios state(nullptr);
cout << "The answer in decimal is: " << 42 << endl;
state.copyfmt(cout); // save current formatting
cout << "In hex: 0x" // now load up a bunch of formatting modifiers
<< hex
<< uppercase
<< setw(8)
<< setfill('0')
<< 42 // the actual value we wanted to print out
<< endl;
cout.copyfmt(state); // restore previous formatting
}
Deze benadering is typeveilig en uitbreidbaar, maar is ook complex en uitgebreid.
Alternatieve indelingsopties
Als alternatief kunt u deze gebruiken Boost.Format
vanuit de Boost C++-bibliotheken, ook al is dit niet de standaard. U kunt elke Boost-bibliotheek downloaden van de Boost-website .
Enkele voordelen hiervan Boost.Format
zijn:
Veilig: Type-veilig en genereert een uitzondering op fouten, bijvoorbeeld de specificatie van te weinig of te veel items.
Uitbreidbaar: werkt voor elk type dat kan worden gestreamd.
Handig: Standaard POSIX en vergelijkbare notatietekenreeksen.
Hoewel Boost.Format
deze is gebouwd op C++ <iostream-faciliteiten> , die veilig en uitbreidbaar zijn, zijn ze niet geoptimaliseerd voor prestaties. Wanneer u prestatieoptimalisatie nodig hebt, kunt u C printf en sprintf overwegen, die snel en eenvoudig te gebruiken zijn. Ze zijn echter niet uitbreidbaar of veilig tegen beveiligingsproblemen. (Er bestaan veilige versies, maar er wordt een lichte prestatiestraf opgelegd. Zie printf_s, _printf_s_l, wprintf_s, _wprintf_s_l en sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l) voor meer informatie.
In de volgende code ziet u enkele van de boost-opmaakfuncties.
string s = str( format("%2% %2% %1%\n") % "world" % "hello" );
// s contains "hello hello world"
for( auto i = 0; i < names.size(); ++i )
cout << format("%1% %2% %|40t|%3%\n") % first[i] % last[i] % tel[i];
// Georges Benjamin Clemenceau +33 (0) 123 456 789
// Jean de Lattre de Tassigny +33 (0) 987 654 321
Zie ook
Welkom terug in C++
Naslaginformatie over C++-taal
C++ Standaardbibliotheek
<iostream>
<grens>
<iomanip>