C++ 20 – std::muoto
C++20 sisältää joukon uusia ominaisuuksia ja parannuksia, mukaan lukien muoto() toiminto. Tässä artikkelissa tutkimme, kuinka std::formaattia voidaan käyttää merkkijonojen muotoiluun C++20:ssa.
C++20 – std::muoto
std::format on uusi C++20:ssä käyttöön otettu funktio, joka tarjoaa tavan muotoilla merkkijonoja korvaamalla muotomerkkijonon sisällä olevat paikkamerkit annettujen argumenttien arvoilla. Paikkamerkit esitetään muodossa {} muotomerkkijonon sisällä.
Syntaksi:
std::string std::format(std::string_view format_string, Args... args);
Palautustyyppi: Funktio palauttaa std::merkkijonon, joka sisältää muotoillun tulosteen.
C++20:ssä otetaan käyttöön uusi tietotyyppi nimeltä std::string_view, joka tarjoaa näkymän taustalla olevasta merkkijonosta. Se toimii samalla tavalla kuin osoitin merkkijonoon, mutta siinä on lisäturva- ja käyttömukavuusominaisuuksia. Args… edustaa variadic-parametria, mikä tarkoittaa, että std::format-funktio voi ottaa vaihtelevan määrän minkä tahansa tyyppisiä argumentteja.
Esimerkkejä C++ 20 – std::formaatista
Esimerkki 1:
Seuraava koodi näyttää, kuinka std::format-muotoa käytetään muuttujien paikkamerkeillä varustetun merkkijonon muotoiluun.
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;> }> |
Lähtö
My name is John and my favorite number is 42
Yllä olevassa esimerkissä meillä on muotomerkkijono, joka sisältää kaksi paikkamerkkiä, {}. Välitämme muuttujien name ja num arvot std::format-funktiolle, joka korvaa paikkamerkit muuttujien arvoilla. Tuloksena oleva merkkijono tallennetaan muuttujaan formatted_str, joka tulostetaan sitten konsoliin.
Esimerkki 2:
Seuraavassa esimerkissä ymmärrämme sijaintiargumentit std::formatilla.
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;> }> |
Lähtö
My name is John and my favorite number is 42
Yllä olevassa esimerkissä olemme vaihtaneet argumenttien järjestyksen std::format-funktiossa ja olemme lisänneet paikkamerkitsimiin paikkaindeksit. Ensimmäinen paikkamerkki korvataan arvolla num ja toinen paikkamerkki nimen arvolla.
Esimerkki 3:
Seuraavassa esimerkissä näemme, kuinka std::format tarjoaa monia vaihtoehtoja merkkijonojen muotoiluun, jossa voimme käyttää {} paikkamerkkejä määrittääksesi muotoiluasetukset kullekin argumentille.
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;> }> |
Lähtö
My name is Jo and pi is 3.14
Yllä olevassa esimerkissä olemme lisänneet muotoiluvaihtoehdot paikkamerkkeihin. Ensimmäinen paikkamerkki on muotoiltu liukulukuksi kahdella desimaalilla, ja toinen paikkamerkki muotoillaan merkkijonoksi, jonka leveys on enintään kaksi merkkiä.
Johtopäätös
std::format tukee laajaa valikoimaa muotoiluvaihtoehtoja, mukaan lukien kyky muotoilla käyttäjän määrittämiä tyyppejä. Se on tehokkaampi kuin aiemmat C++:n merkkijonomuotoiluvaihtoehdot, kuten sprintf ja printf.