C/C++之字面量詳解(代碼中的固定值,用于表示各種數(shù)據(jù)類型的常量)
在C++中,字面量(Literal) 是直接出現(xiàn)在代碼中的固定值,用于表示各種數(shù)據(jù)類型的常量。它們可以是數(shù)字、字符、字符串、布爾值或特殊類型的值。
1. 整型字面量(Integer Literals)
用于表示整數(shù),支持多種進制和類型后綴:
進制表示
- 十進制:普通數(shù)字(無前綴),如
42、100。 - 八進制:以
0開頭,如012表示十進制的10。 - 十六進制:以
0x或0X開頭,如0xFF表示十進制的255。 - 二進制(C++14+):以
0b或0B開頭,如0b1010表示十進制的10。
類型后綴
u或U:unsigned類型,如42U。l或L:long類型,如100L。ll或LL:long long類型,如9999999999LL。ul或UL:unsigned long類型,如1000000UL。
示例:
int decimal = 42; // 十進制 int octal = 012; // 八進制,等于十進制10 int hex = 0xFF; // 十六進制,等于十進制255 int binary = 0b1010; // 二進制,等于十進制10 unsigned long large = 1234567890UL; // unsigned long類型
2. 浮點型字面量(Floating-Point Literals)
用于表示小數(shù),支持兩種表示方式和類型后綴:
表示方式
- 小數(shù)形式:如
3.14、0.5、.25(等價于0.25)。 - 指數(shù)形式:使用
e或E表示科學(xué)計數(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)
用于表示單個字符,用單引號 ' 包圍:
- 普通字符:如
'a'、'0'、'$'。 - 轉(zhuǎn)義字符:以反斜杠
\開頭,如'\n'(換行符)、'\t'(制表符)、'\''(單引號)。
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編碼的歐元符號
4. 字符串字面量(String Literals)
用于表示文本,用雙引號 " 包圍:
- 普通字符串:如
"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)
表示邏輯值,只有兩個:
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+)
允許自定義字面量的解析方式,通過重載后綴運算符實現(xiàn)。標(biāo)準(zhǔn)庫中也有一些預(yù)定義的UDL,例如:
- 時間單位:
1h(1小時)、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)
編譯器會根據(jù)字面量的形式和后綴自動推導(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ù)或高精度計算時。
用戶定義字面量則提供了強大的擴展能力,使代碼更具表達力。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++編程中break語句和continue語句的學(xué)習(xí)教程
這篇文章主要介紹了C++編程中break語句和continue語句的學(xué)習(xí)教程,break和continue是C++循環(huán)控制中的基礎(chǔ)語句,需要的朋友可以參考下2016-01-01
C語言算法練習(xí)之?dāng)?shù)組求素數(shù)
這篇文章主要為大家介紹了C語言算法練習(xí)中數(shù)組求素數(shù)的實現(xiàn)方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下2022-09-09

