最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++20 格式化字符串的實現(xiàn)

 更新時間:2024年10月29日 09:30:04   作者:程序員的園  
本文主要講述了C++20中新引入的std::format功能,該功能用于格式化字符串,提供了一種簡潔、類型安全且靈活的方式來構(gòu)建格式化字符串,文章從使用場景、格式化規(guī)則、自定義類型的格式化等方面進行了詳細的介紹,感興趣的可以了解一下

在 C++20 中引入的 std::format 是一個強大的工具,用于格式化字符串。它提供了一種簡潔、類型安全且靈活的方式來構(gòu)建格式化字符串,同時避免了傳統(tǒng)的格式化函數(shù)帶來的許多問題。

概述

std::format 是 C++20 中引入的一個新功能,用于格式化字符串。它位于 <format> 頭文件中,并提供了一種類似于 Python 中 f-string 的語法來構(gòu)建格式化字符串。

使用場景

字符串格式化

std::string name = "Alice";
int age = 30;
std::string formatted_str = std::format("Name: {}, Age: {}", name, age);

//output:
//Name: Alice, Age: 30

文中使用{}作為占位符來進行文字替換,提出如下三個問題:

1.替換規(guī)則是什么,
2.如果占位符多/或少會出現(xiàn)什么問題呢;
3.如果實際輸出時帶輸出字符串需要被{}包含時如何實現(xiàn)呢。

格式化規(guī)則

_EXPORT_STD template <class... _Types>
_NODISCARD string format(const format_string<_Types...> _Fmt, _Types&&... _Args) {
    return _STD vformat(_Fmt.get(), _STD make_format_args(_Args...));
}

為便于描述,_Fmt后續(xù)稱為——“格式字符串”,_Args后續(xù)稱為——“變量”

變量依次替換“格式字符串”中的{};如上例

std::string name = "Alice";
int age = 30;
std::string formatted_str = std::format("Name: {}, Age: {}", name, age);
//output:Name: Alice, Age: 30

如果“格式字符串”中的{}數(shù)量大于變量的個數(shù),如下例代碼,編譯成功,但是運行拋出“std::format_error"異常。

std::string formatted_str = std::format("Name: {}, {},Age: {}", "Alice", 30);//throw error

如果“格式字符串”中的{}數(shù)量小于等于變量的個數(shù),假設(shè)變量個數(shù)為n,則n個變量會替換前n個{}。

std::string formatted_str = std::format("Name: {},Age: {}", "Alice", 30);
std::string formatted_str = std::format("Name: {}, Age: {}", "Alice", 30,"hello");
//output:
//Name: Alice,Age: 30
//Name: Alice, Age: 30

如果帶輸出的變量需要被{}包含,需要使用{{}}包含{}進而對{}轉(zhuǎn)義,形如{{{}}},最內(nèi)測的{}為占位符,而外側(cè)的{{}}是{}的占位符

  std::string ret = std::format("name {}  age {{   {}  }}", "janny", 20);
//output:
//name janny  age {   20  }

自定義類型的格式化

為實現(xiàn)自定義數(shù)據(jù)類型的格式化,需要為其提供格式化器,格式化器是標準的,可以參考如下進行修改即可。

#include <format>  
#include <iostream>  

struct vector3 {
    int x, y,z;
};

// 定義一個格式化處理程序  
template <>
struct std::formatter<vector3> {
     auto parse(format_parse_context& ctx) { return ctx.end(); }
    template <typename FormatContext>
    auto format(const vector3 & p, FormatContext& ctx) const {
        return std::format_to(ctx.out(), "({}, {}, {})", p.x, p.y,p.z);
    }
};

void using_format()
{
    vector3 p{ 10, 20,30 };
    std::cout << std::format("The point is: {}\n", p) << std::endl;
}

//output
//The point is: (10, 20, 30)

總結(jié)

std::format提供類型安全且靈活的字符串格式化方法,使用時要牢記{}的個數(shù)不要大于變量的個數(shù);同時,自定義數(shù)據(jù)類型需要提供格式化器。

到此這篇關(guān)于C++20 格式化字符串的實現(xiàn)的文章就介紹到這了,更多相關(guān)C++20 格式化字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C/C++中*和&的用法詳解

    C/C++中*和&的用法詳解

    在本篇文章中我們給大家總結(jié)了C/C++中*和&的用法以及相關(guān)的代碼分享,有興趣的朋友趕緊學(xué)習下吧。
    2018-03-03
  • C++?實現(xiàn)讀寫鎖的代碼詳解

    C++?實現(xiàn)讀寫鎖的代碼詳解

    C++讀寫鎖是一種多線程同步機制,它允許多個線程同時讀取共享數(shù)據(jù),但只允許一個線程寫入共享數(shù)據(jù),這種鎖可以提高程序的并發(fā)性和性能,本文給大家介紹了C++?實現(xiàn)讀寫鎖的代碼,需要的朋友可以參考下
    2023-10-10
  • 利用Matlab繪制好看的弦圖

    利用Matlab繪制好看的弦圖

    弦圖在python中以及R中非常常見,但是MATLAB中卻始終沒有相關(guān)函數(shù)。本文就來用Matlab繪制一些好看的弦圖,感興趣的小伙伴可以了解一下
    2022-08-08
  • 深入分析C++派生類中的保護成員繼承

    深入分析C++派生類中的保護成員繼承

    這篇文章主要介紹了C++派生類中的保護成員繼承,深入對C++面向?qū)ο缶幊痰睦^承機制進行了解析,需要的朋友可以參考下
    2015-09-09
  • Matlab利用prim算法實現(xiàn)迷宮的生成

    Matlab利用prim算法實現(xiàn)迷宮的生成

    普里姆算法(Prim算法),圖論中的一種算法,可在加權(quán)連通圖里搜索最小生成樹。本文將利用prim算法迷宮生成及其藝術(shù)渲染,感興趣的可以了解一下
    2022-10-10
  • C語言 全局變量和局部變量詳解及實例

    C語言 全局變量和局部變量詳解及實例

    這篇文章主要介紹了C語言 全局變量和局部變量詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 一起來了解一下C++的結(jié)構(gòu)體?struct

    一起來了解一下C++的結(jié)構(gòu)體?struct

    這篇文章主要為大家詳細介紹了C++的結(jié)構(gòu)體struct,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • QT的幾種QMap插入順序說明

    QT的幾種QMap插入順序說明

    本文主要介紹了QT的幾種QMap插入順序說明,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2025-09-09
  • C++ Boost PropertyTree示例超詳細講解

    C++ Boost PropertyTree示例超詳細講解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • 詳解Dev C++使用教程(使用Dev C++編寫C語言程序)

    詳解Dev C++使用教程(使用Dev C++編寫C語言程序)

    這篇文章主要介紹了詳解Dev C++使用教程(使用Dev C++編寫C語言程序),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-03-03

最新評論

禄丰县| 怀宁县| 庆元县| 灯塔市| 炉霍县| 尚义县| 南雄市| 凤庆县| 都匀市| 丘北县| 恭城| 新建县| 广丰县| 监利县| 上蔡县| 许昌县| 墨脱县| 西林县| 红河县| 新宁县| 舒城县| 宿迁市| 固阳县| 静宁县| 榆树市| 曲水县| 东明县| 开封市| 壶关县| 巴青县| 阜宁县| 陕西省| 东阳市| 平塘县| 鹰潭市| 巴青县| 西乌珠穆沁旗| 彩票| 麻阳| 青阳县| 贵港市|