C++ 20 – std::formát

C++20 přichází s řadou nových funkcí a vylepšení, včetně formát() funkce. V tomto článku prozkoumáme, jak lze std::format použít k formátování řetězců v C++20.

C++20 – std::formát

std::format je nová funkce zavedená v C++20, která poskytuje způsob formátování řetězců nahrazením zástupných symbolů uvnitř formátovacího řetězce hodnotami poskytnutých argumentů. Zástupné symboly jsou reprezentovány pomocí {} uvnitř formátovacího řetězce.

Syntax:

std::string std::format(std::string_view format_string, Args... args); 

Typ návratu: Funkce vrátí std::string, který obsahuje formátovaný výstup.

V C++20 je zaveden nový datový typ s názvem std::string_view, který poskytuje pohled na základní řetězec. Funguje podobně jako ukazatel na řetězec, ale s dalšími bezpečnostními a pohodlnými funkcemi. Args… představuje variadický parametr, což znamená, že funkce std::format může mít proměnný počet argumentů libovolného typu.

Příklady C++ 20 – std::format

Příklad 1:

Následující kód ukazuje, jak použít std::format k formátování řetězce se zástupnými symboly pro proměnné.

C++




// C++ Program to implement> // C++ 20 - std::format> #include> #include> > using> namespace> std;> > int> main()> {> > // Declare variables> > int> num = 42;> > std::string name => 'John'> ;> > > // Use std::format to format a string with placeholders> > // for variables> > std::string formatted_str = std::format(> > 'My name is {} and my favorite number is {}'> , name,> > num);> > > // Print formatted string to console> > std::cout < < formatted_str < < std::endl;> > > return> 0;> }>

Výstup

My name is John and my favorite number is 42 

Ve výše uvedeném příkladu máme formátovací řetězec, který obsahuje dva zástupné symboly, {}. Hodnoty proměnných name a num předáme funkci std::format, která nahradí zástupné symboly hodnotami proměnných. Výsledný řetězec je uložen v proměnné formatted_str, která je následně vytištěna na konzoli.

Příklad 2:

V následujícím příkladu budeme rozumět pozičním argumentům s std::format.

C++




// C++ Program to implement> // C++ 20 - std::format> #include> #include> > int> main()> {> > // Declare an integer variable named num> > // and initialize it with the value 42> > int> num = 42;> > // Declare a string variable named name> > // and initialize it with the value 'John'> > std::string name => 'John'> ;> > > // Call the std::format function to create a formatted> > // string with placeholders for num and name The first> > // placeholder is represented by {0} and is replaced by> > // the value of num The second placeholder is> > // represented by {1} and is replaced by the value of> > // name> > std::string formatted_str = std::format(> > 'My name is {1} and my favorite number is {0}'> , num, name);> > > // Print the formatted string to the console> > std::cout < < formatted_str < < std::endl;> > return> 0;> }>

Výstup

My name is John and my favorite number is 42 

Ve výše uvedeném příkladu jsme obrátili pořadí argumentů ve funkci std::format a do zástupných symbolů jsme přidali poziční indexy. První zástupný symbol je nahrazen hodnotou num a druhý zástupný symbol je nahrazen hodnotou name.

Příklad 3:

V následujícím příkladu uvidíme, jak std::format poskytuje mnoho možností pro formátování řetězců, kde můžeme použít zástupné symboly {} k určení možností formátování pro každý argument.

C++




// C++ Program to implement> // C++ 20 - std::format> #include> #include> > int> main()> {> > > // Declare and initialize a double variable.> > double> num = 3.14159;> > > // Declare and initialize a string variable.> > std::string name => 'John'> ;> > > // Format a string with two placeholders, one for a> > // double and another for a string. The first> > // placeholder formats the double with two decimal> > // places and the second placeholder truncates the> > // string to two characters.> > std::string formatted_str = std::format(> > 'My name is {1:.2s} and pi is {0:.2f}'> , num, name);> > > // Print the formatted string to the console.> > std::cout < < formatted_str < < std::endl;> > > return> 0;> }>

Výstup

My name is Jo and pi is 3.14 

Ve výše uvedeném příkladu jsme do zástupných symbolů přidali možnosti formátování. První zástupný symbol je formátován jako číslo s plovoucí desetinnou čárkou se dvěma desetinnými místy a druhý zástupný symbol je formátován jako řetězec s maximální šířkou dvou znaků.

Závěr

std::format podporuje širokou škálu možností formátování, včetně možnosti formátovat uživatelem definované typy. Je efektivnější než předchozí možnosti formátování řetězců v C++, jako je sprintf a printf.