欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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語言之如何求e的近似值

    c語言之如何求e的近似值

    這篇文章主要介紹了c語言之如何求e的近似值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C語言實現(xiàn)3*3數(shù)組對角線之和示例

    C語言實現(xiàn)3*3數(shù)組對角線之和示例

    今天小編就為大家分享一篇C語言實現(xiàn)3*3數(shù)組對角線之和示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • QT使用Http協(xié)議通信的實現(xiàn)示例

    QT使用Http協(xié)議通信的實現(xiàn)示例

    使用QT進行應(yīng)用開發(fā)時,有時候需要進行客戶端和服務(wù)端的網(wǎng)絡(luò)通信,本文主要介紹了QT使用Http協(xié)議通信的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • C語言三子棋的實現(xiàn)思路到過程詳解

    C語言三子棋的實現(xiàn)思路到過程詳解

    所謂三子棋,就是三行三列的棋盤,玩家可以和電腦下棋,率先連成三個的獲勝。這篇文章主要為大家詳細介紹了如何通過C語言實現(xiàn)三子棋小游戲,感興趣的小伙伴可以嘗試一下
    2023-02-02
  • QT實現(xiàn)FTP上傳文件

    QT實現(xiàn)FTP上傳文件

    這篇文章主要為大家詳細介紹了QT實現(xiàn)FTP上傳文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++計算每個字符出現(xiàn)的次數(shù)

    C++計算每個字符出現(xiàn)的次數(shù)

    這篇文章主要介紹了C++計算每個字符出現(xiàn)的次數(shù)的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • C++ STL_vector 迭代器失效問題的解決方法

    C++ STL_vector 迭代器失效問題的解決方法

    迭代器的主要作用就是讓算法能夠不用關(guān)心底層數(shù)據(jù)結(jié)構(gòu),其底層實際就是一個指針,或者是對指針進行了封裝,迭代器失效,實際就是迭代器底層對應(yīng)指針所指向的空間被銷毀了,對迭代器失效我們了解了,那么現(xiàn)在我們就分析,在vector中哪些操作會導(dǎo)致迭代器失效
    2023-08-08
  • c++ 智能指針基礎(chǔ)詳解

    c++ 智能指針基礎(chǔ)詳解

    這篇文章主要介紹了c++ 智能指針基礎(chǔ)的相關(guān)資料,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C語言實現(xiàn)簡易三子棋游戲

    C語言實現(xiàn)簡易三子棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C語言實現(xiàn)單詞小幫手

    C語言實現(xiàn)單詞小幫手

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)單詞小幫手,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評論