C/C++之字面量詳解(代碼中的固定值,用于表示各種數(shù)據(jù)類型的常量)
在C++中,字面量(Literal) 是直接出現(xiàn)在代碼中的固定值,用于表示各種數(shù)據(jù)類型的常量。它們可以是數(shù)字、字符、字符串、布爾值或特殊類型的值。
1. 整型字面量(Integer Literals)
用于表示整數(shù),支持多種進(jìn)制和類型后綴:
進(jìn)制表示
- 十進(jìn)制:普通數(shù)字(無前綴),如
42、100。 - 八進(jìn)制:以
0開頭,如012表示十進(jìn)制的10。 - 十六進(jìn)制:以
0x或0X開頭,如0xFF表示十進(jìn)制的255。 - 二進(jìn)制(C++14+):以
0b或0B開頭,如0b1010表示十進(jìn)制的10。
類型后綴
u或U:unsigned類型,如42U。l或L:long類型,如100L。ll或LL:long long類型,如9999999999LL。ul或UL:unsigned long類型,如1000000UL。
示例:
int decimal = 42; // 十進(jìn)制 int octal = 012; // 八進(jìn)制,等于十進(jìn)制10 int hex = 0xFF; // 十六進(jìn)制,等于十進(jìn)制255 int binary = 0b1010; // 二進(jìn)制,等于十進(jìn)制10 unsigned long large = 1234567890UL; // unsigned long類型
2. 浮點(diǎn)型字面量(Floating-Point Literals)
用于表示小數(shù),支持兩種表示方式和類型后綴:
表示方式
- 小數(shù)形式:如
3.14、0.5、.25(等價(jià)于0.25)。 - 指數(shù)形式:使用
e或E表示科學(xué)計(jì)數(shù)法,如1.23e5表示1.23×10?(即123000)。
類型后綴
f或F:float類型,如3.14F。l或L:long double類型,如3.14L。
示例:
double pi = 3.14; // double類型 float pi_f = 3.14F; // float類型 long double big = 1.23e100L; // long double類型
3. 字符字面量(Character Literals)
用于表示單個(gè)字符,用單引號(hào) ' 包圍:
- 普通字符:如
'a'、'0'、'$'。 - 轉(zhuǎn)義字符:以反斜杠
\開頭,如'\n'(換行符)、'\t'(制表符)、'\''(單引號(hào))。
Unicode字符(C++11+):
u8'x':UTF-8編碼,類型為char。u'x':UTF-16編碼,類型為char16_t。U'x':UTF-32編碼,類型為char32_t。L'x':寬字符,類型為wchar_t。
示例:
char c = 'A'; // 普通字符 char newline = '\n'; // 換行符 char16_t euro = u'€'; // UTF-16編碼的歐元符號(hào)
4. 字符串字面量(String Literals)
用于表示文本,用雙引號(hào) " 包圍:
- 普通字符串:如
"Hello"、"123"。 - 轉(zhuǎn)義字符:與字符字面量相同,如
"Hello\nWorld"。 - 原始字符串(C++11+):用
R"(...)"表示,無需轉(zhuǎn)義特殊字符,如R"(C:\path\to\file)"。
Unicode字符串:
u8"text":UTF-8編碼,類型為const char*。u"text":UTF-16編碼,類型為const char16_t*。U"text":UTF-32編碼,類型為const char32_t*。L"text":寬字符,類型為const wchar_t*。
示例:
const char* str = "Hello"; // 普通字符串 const char* path = R"(C:\Users\Doc)"; // 原始字符串 const char16_t* utf16 = u"你好"; // UTF-16編碼的字符串
5. 布爾字面量(Boolean Literals)
表示邏輯值,只有兩個(gè):
true:真。false:假。
示例:
bool isReady = true; bool isValid = false;
6. 指針字面量(Pointer Literals)
表示空指針:
nullptr(C++11+):類型安全的空指針常量,類型為std::nullptr_t。NULL:傳統(tǒng)的空指針宏,通常定義為0或(void*)0。
示例:
int* ptr = nullptr; // C++11及以后推薦使用nullptr
7. 用戶定義字面量(User-Defined Literals, C++11+)
允許自定義字面量的解析方式,通過重載后綴運(yùn)算符實(shí)現(xiàn)。標(biāo)準(zhǔn)庫中也有一些預(yù)定義的UDL,例如:
- 時(shí)間單位:
1h(1小時(shí))、30min(30分鐘)、45s(45秒)。 - 字符串轉(zhuǎn)換:
"hello"s表示std::string類型(需包含<string>)。
示例:
#include <iostream>
#include <string>
using namespace std::literals;
int main() {
auto str = "hello"s; // std::string類型
auto duration = 2h + 30min; // std::chrono::duration類型
std::cout << str.length() << std::endl;
return 0;
}
8. 字面量的類型推導(dǎo)
編譯器會(huì)根據(jù)字面量的形式和后綴自動(dòng)推導(dǎo)其類型:
42:默認(rèn)int,若超出int范圍則為long或long long。3.14:默認(rèn)double。'a':char類型。"hello":const char[6]類型(包含終止符'\0')。
字面量是C++中表示常量值的基本方式,不同類型的字面量有不同的語法和用途。
理解字面量的類型和后綴有助于避免隱式類型轉(zhuǎn)換和溢出問題,尤其是在處理大數(shù)或高精度計(jì)算時(shí)。
用戶定義字面量則提供了強(qiáng)大的擴(kuò)展能力,使代碼更具表達(dá)力。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Qt5實(shí)現(xiàn)文本編輯器(附詳細(xì)代碼)
QT是一個(gè)跨平臺(tái)的GUI開發(fā)框架,我使用的QT5 C++版本的,本文主要介紹了Qt5實(shí)現(xiàn)文本編輯器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
C++類與對(duì)象之日期類的實(shí)現(xiàn)
這篇文章主要介紹如何實(shí)現(xiàn)C++中的日期類相關(guān)資料,需要的朋友可以參考下面文章的具體內(nèi)容2021-09-09
C/C++可變參數(shù)函數(shù)的實(shí)現(xiàn)
這篇文章主要介紹了C/C++可變參數(shù)函數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
詳解C語言中sizeof如何在自定義函數(shù)中正常工作
在main函數(shù)中,sizeof是可以正常工作的,但是在自定義函數(shù)中就不可以了。所以本文將為大家詳細(xì)講解一下如何解決這一問題,感興趣的可以了解一下2022-05-05
C++實(shí)現(xiàn)兩個(gè)有序數(shù)組的合并
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)兩個(gè)有序數(shù)組的合并,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
C語言中操作進(jìn)程信號(hào)的相關(guān)函數(shù)使用詳解
這篇文章主要介紹了C語言中操作進(jìn)程信號(hào)的相關(guān)函數(shù)使用詳解,分別是signal()函數(shù)和kill()函數(shù)的用法,需要的朋友可以參考下2015-09-09

