logo

C++ 20 – std::format

C++20 містить безліч нових функцій і вдосконалень, зокрема формат() функція. У цій статті ми розглянемо, як std::format можна використовувати для форматування рядків у C++20.

C++20 – std::format

std::format — це нова функція, представлена ​​в C++20, яка надає спосіб форматування рядків шляхом заміни заповнювачів у рядку формату на значення наданих аргументів. Заповнювачі представлені за допомогою {} всередині рядка формату.

Синтаксис:

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

Тип повернення: Функція повертає std::string, що містить відформатований вихід.



У C++20 введено новий тип даних під назвою std::string_view, який забезпечує перегляд основного рядка. Він працює подібно до покажчика на рядок, але з додатковими функціями безпеки та зручності. Args… представляє варіативний параметр, що означає, що функція std::format може приймати змінну кількість аргументів будь-якого типу.

Приклади C++ 20 – std::format

Приклад 1:

Наступний код демонструє, як використовувати std::format для форматування рядка з покажчиками місця заповнення для змінних.

C++




if і else в bash

// 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;> }>

>

>

Вихід

My name is John and my favorite number is 42>

У наведеному вище прикладі ми маємо рядок формату, який містить два заповнювачі, {}. Ми передаємо значення змінних name і num у функцію std::format, яка замінює заповнювачі значеннями змінних. Отриманий рядок зберігається в змінній formatted_str, яка потім друкується на консолі.

приклад 2:

У наступному прикладі ми розглянемо позиційні аргументи за допомогою 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;> }>

>

>

10 у степені 6

Вихід

My name is John and my favorite number is 42>

У наведеному вище прикладі ми змінили порядок аргументів у функції std::format і додали позиційні індекси до заповнювачів. Перший заповнювач замінюється значенням num, а другий заповнювач замінюється значенням name.

приклад 3:

У наступному прикладі ми побачимо, як std::format надає багато параметрів для форматування рядків, де ми можемо використовувати заповнювачі {}, щоб указати параметри форматування для кожного аргументу.

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;> }>

>

>

Вихід

My name is Jo and pi is 3.14>

У наведеному вище прикладі ми додали параметри форматування до заповнювачів. Перший покажчик місця заповнення відформатовано як число з плаваючою комою з двома знаками після коми, а другий покажчик місця заповнення відформатовано як рядок із максимальною шириною двох символів.

Висновок

std::format підтримує широкий спектр параметрів форматування, включаючи можливість форматувати типи, визначені користувачем. Це ефективніше, ніж попередні варіанти форматування рядків у C++, такі як sprintf і printf.