詳解C++11 原始字符串字面量(Json字符串表達(dá)更方便)
1.為什么要用原始字符串字面量?
因?yàn)槠胀ㄗ址绻刑囟ǖ淖址?nbsp; " 字符 或者 \ 字符),就要進(jìn)行轉(zhuǎn)移(\進(jìn)行轉(zhuǎn)義),不然就是特殊的含義。


這就造成了如果一個(gè)字符串有很多的這些字符,表達(dá)起來(lái)就不方便。有這個(gè)方面的需求,那么有沒(méi)有一種字符串把所有的字符都按字面意思處理呢?那么就有了原始字符串量。
2.原始字符串字面量:(輸入什么就是什么)
Kimi:
原始字符串字面量(Raw String Literal)是C++11引入的一種字符串表示方式,用于簡(jiǎn)化字符串的定義,特別是當(dāng)字符串中包含大量特殊字符(如換行符、雙引號(hào)等)時(shí)。原始字符串字面量避免了對(duì)這些特殊字符進(jìn)行轉(zhuǎn)義的需要,從而使代碼更清晰、更易于維護(hù)。
從上面來(lái)看,那么Json風(fēng)格的字符串就包含了很多的",這樣用原始字符串字母量就比較方便咯。
內(nèi)容里面是什么,就直接是什么,不會(huì)進(jìn)行特殊字符處理。
原始字符串字面量的基本格式:
R"(內(nèi)容)"
R"( 是原始字符串的開(kāi)始標(biāo)記。
內(nèi)容 是字符串的實(shí)際內(nèi)容,可以包含任意字符,包括換行符、雙引號(hào)等。
)" 是原始字符串的結(jié)束標(biāo)記。但似乎也有BUG,如果內(nèi)容里面有)"那么就會(huì)當(dāng)成字符串的結(jié)束。
但是還提供了原始字符串字面量的變體。
原始字符串字面量變體:
有了這個(gè),可以自定義了,那么就實(shí)用多了??梢愿鶕?jù)自己的場(chǎng)景,即使內(nèi)容里面出現(xiàn))"也可以處理了。
R"delimiter( 開(kāi)始標(biāo)志
內(nèi)容
)delimiter" 結(jié)束標(biāo)志
R"delimiter(內(nèi)容)delimiter"
對(duì)比這三個(gè)的區(qū)別:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
using namespace std;
int main()
{
//普通正常字符串
string a = "aaa\"\\";
//原始字符串字面量
string b = R"(aaa\"\\)";
//原始字符串字面量變體,可以自己設(shè)計(jì)邊界
//R"aaa(字符串開(kāi)始,)aaa"字符串結(jié)束。
string c = R"aaa("("( )")")aaa";
cout << a << endl;
cout << b << endl;
cout << c << endl;
return 0;
}
適用場(chǎng)景:
JSON字符串
JSON字符串中也經(jīng)常需要使用雙引號(hào),原始字符串可以簡(jiǎn)化定義:
std::string jsonString = R"({"name": "Alice", "age": 30, "scores": [85, 90, 78]})";HTML:
HTML代碼直接寫(xiě)入字符串,不需要轉(zhuǎn)義或手動(dòng)添加換行符。
std::string html = R"(
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
)";到此這篇關(guān)于C++11 原始字符串字面量(Json字符串表達(dá)更方便)的文章就介紹到這了,更多相關(guān)C++11 原始字符串字面量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)小型工資管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)小型工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
C++實(shí)現(xiàn)含附件的郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)含附件的郵件發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
深入剖析C語(yǔ)言中qsort函數(shù)的實(shí)現(xiàn)原理
這篇文章主要介紹了C語(yǔ)言中qsort函數(shù)的實(shí)現(xiàn)原理,本文將從回調(diào)函數(shù),qsort函數(shù)的應(yīng)用,qsort函數(shù)的實(shí)現(xiàn)原理三個(gè)方面進(jìn)行講解,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-03-03
c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn)
本文詳細(xì)講解了c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
掌握C++:揭秘寫(xiě)時(shí)拷貝與淺深拷貝之間的關(guān)系
探索C++的奧秘,本指南將揭秘寫(xiě)時(shí)拷貝與淺深拷貝之間的微妙關(guān)系,摸索這些復(fù)雜概念背后的邏輯,讓你的編程技能瞬間提升,來(lái)吧,讓我們一起進(jìn)入這個(gè)引人入勝的C++世界!2024-01-01
C++成員函數(shù)后面加override問(wèn)題
這篇文章主要介紹了C++成員函數(shù)后面加override問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
QT5交叉編譯入門(mén)級(jí)教程(arm64、mips64)
交叉編譯就是在當(dāng)前系統(tǒng)平臺(tái)上,開(kāi)發(fā)編譯運(yùn)行于其它平臺(tái)的程序,比如本文硬件環(huán)境是x86平臺(tái),但是編譯出來(lái)的程序是在arm64架構(gòu)、mips64等架構(gòu)上運(yùn)行,本文給大家分享QT5交叉編譯入門(mén)級(jí)教程(arm64、mips64),感興趣的朋友一起看看吧2023-11-11
C++的靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編
本文闡述了靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編的概念和區(qū)別,通過(guò)具體實(shí)例分析了實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編的條件,指出了虛函數(shù)是實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編的基礎(chǔ)。2016-03-03

