C++ 20 – std::formát

C++20 prichádza s množstvom nových funkcií a vylepšení, vrátane formát() funkciu. V tomto článku preskúmame, ako sa dá std::format použiť na formátovanie reťazcov v C++20.

C++20 – std::formát

std::format je nová funkcia zavedená v C++20, ktorá poskytuje spôsob formátovania reťazcov nahradením zástupných symbolov vo formátovacom reťazci hodnotami poskytnutých argumentov. Zástupné symboly sú reprezentované pomocou {} vo formáte reťazca.

Syntax:

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

Typ návratu: Funkcia vráti std::string, ktorý obsahuje naformátovaný výstup.

V C++20 je zavedený nový dátový typ s názvom std::string_view, ktorý poskytuje pohľad na základný reťazec. Funguje podobne ako ukazovateľ na reťazec, ale s ďalšími bezpečnostnými a pohodlnými funkciami. Args… predstavuje variadický parameter, čo znamená, že funkcia std::format môže mať premenný počet argumentov akéhokoľvek typu.

Príklady C++ 20 – std::format

Príklad 1:

Nasledujúci kód ukazuje, ako použiť std::format na formátovanie reťazca so zástupnými symbolmi pre premenné.

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ýkon

My name is John and my favorite number is 42 

Vo vyššie uvedenom príklade máme formátovací reťazec, ktorý obsahuje dva zástupné symboly, {}. Hodnoty premenných name a num odovzdáme funkcii std::format, ktorá nahradí zástupné symboly hodnotami premenných. Výsledný reťazec sa uloží do premennej formatted_str, ktorá sa potom vytlačí do konzoly.

Príklad 2:

V nasledujúcom príklade pochopíme pozičné argumenty 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ýkon

My name is John and my favorite number is 42 

Vo vyššie uvedenom príklade sme obrátili poradie argumentov vo funkcii std::format a do zástupných symbolov sme pridali pozičné indexy. Prvý zástupný symbol je nahradený hodnotou num a druhý zástupný symbol je nahradený hodnotou name.

Príklad 3:

V nasledujúcom príklade uvidíme, ako std::format poskytuje veľa možností pre formátovanie reťazcov, kde môžeme použiť zástupné symboly {} na špecifikovanie možností formátovania pre 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ýkon

My name is Jo and pi is 3.14 

Vo vyššie uvedenom príklade sme do zástupných symbolov pridali možnosti formátovania. Prvý zástupný symbol je formátovaný ako číslo s pohyblivou rádovou čiarkou s dvoma desatinnými miestami a druhý zástupný symbol je formátovaný ako reťazec s maximálnou šírkou dva znaky.

Záver

std::format podporuje širokú škálu možností formátovania vrátane možnosti formátovania užívateľom definovaných typov. Je to efektívnejšie ako predchádzajúce možnosti formátovania reťazcov v C++, ako napríklad sprintf a printf.