數值、布林值和指標常值
常值是直接代表值的程式項目。 本文涵蓋整數、浮點、布林值和指標類型的常值。 如需字串和字元常值的相關資訊,請參閱 字串和字元常值(C++)。 您也可以根據上述任何類別來定義自己的常值。 如需詳細資訊,請參閱 使用者定義的常值 (C++)。
您可以在許多內容中使用常值,但最常見的是初始化具名變數,以及將引數傳遞給函式:
const int answer = 42; // integer literal
double d = sin(108.87); // floating point literal passed to sin function
bool b = true; // boolean literal
MyClass* mc = nullptr; // pointer literal
有時,重要的是告訴編譯器如何解譯常值,或提供給它哪個特定類型。 其完成方式是將前置詞或尾碼附加至常值。 例如,前置詞 0x
會告訴編譯器將後面的數位解譯為十六進位值,例如 0x35
。 後 ULL
綴會指示編譯器將值 unsigned long long
視為型別,如 中所示 5894345ULL
。 如需每個常值類型之前置詞和後置詞的完整清單,請參閱下列各節。
整數常值
整數常值的開頭是數字,而且沒有小數部分或指數。 您可以使用十進位、二進位、八進位或十六進位格式來指定整數常值。 您可以選擇性地使用尾碼,將整數常值指定為不帶正負號,並指定為 long 或 long long 類型。
當沒有任何前置詞或尾碼存在時,編譯器會提供整數常值型 int
別 (32 位),如果值符合,則為它提供類型 long long
(64 位)。
若要指定十進位整數常值,請使用非零數字開始指定。 例如:
int i = 157; // Decimal literal
int j = 0198; // Not a decimal number; erroneous octal literal
int k = 0365; // Leading zero specifies octal literal, not decimal
int m = 36'000'000 // digit separators make large values more readable
若要指定八進位整數常值,請使用 0 開始指定,後接範圍 0 到 7 的一連串數字。 數字 8 和 9 是在指定八進位常值中的錯誤。 例如:
int i = 0377; // Octal literal
int j = 0397; // Error: 9 is not an octal digit
若要指定十六進位整數常值,請以 或 開始規格 0x
(「x」 大小寫並不重要),後面接著範圍中的 0
數位序列到 9
和 a
(或) 到 f
(或 A
F
)。 0X
十六進位數字 a
(或 A
) 到 f
(或 F
) 代表範圍 10 到 15 的值。 例如:
int i = 0x3fff; // Hexadecimal literal
int j = 0X3FFF; // Equal to i
若要指定不帶正負號的類型,請使用 u
或 U
尾碼。 若要指定 long 類型,請使用 l
或 L
尾碼。 若要指定 64 位元整數類型,請使用 LL 或 ll 後置詞。 仍然支援 i64 尾碼,但我們不建議這麼做。 它專屬於 Microsoft,且無法移植。 例如:
unsigned val_1 = 328u; // Unsigned value
long val_2 = 0x7FFFFFL; // Long value specified
// as hex literal
unsigned long val_3 = 0776745ul; // Unsigned long value
auto val_4 = 108LL; // signed long long
auto val_4 = 0x8000000000000000ULL << 16; // unsigned long long
數位分隔符號 :您可以使用單引號字元 (apostrophe) 來分隔較大數位中的放置值,讓人類更容易閱讀。 分隔符號對於編譯沒有作用。
long long i = 24'847'458'121;
浮點常值
浮點常值指定必須有小數部分的值。 這些值包含小數點 ( .
) ,而且可以包含指數。
浮點常值具有 顯著性 (有時稱為 mantissa ),其會指定數位的值。 它們具有 指數 ,指定數位的大小。 而且,它們具有選擇性的尾碼,指定常值的類型。 符號會指定為數字序列,後面接著句點,後面接著代表數位小數部分的選擇性數位序列。 例如:
18.46
38.
如果有指數,指數會以 10 的次方指定數字的大小,如下列範例所示:
18.46e0 // 18.46
18.46e1 // 184.6
您可以使用 或 E
來指定 e
指數,其意義相同,後面接著選擇性符號 (+ 或 -) 和數位序列。 如果有指數,18E0
之類的整數就不需要尾端的小數點。
浮點常值預設為 類型 double
。 藉由使用尾碼 f
或 或 或 F
l
L
(尾碼不區分大小寫),可以將常值指定為 float
或 long double
。
雖然 long double
和 double
具有相同的標記法,但它們的類型並不相同。 例如,您可以擁有多載函式,例如
void func( double );
及
void func( long double );
布林值常值
布林常值是 true
和 false
。
指標常值 (C++11)
C++ 引進常 nullptr
值來指定零初始化的指標。 在可攜式程式碼中, nullptr
應該使用 ,而不是整數型別零或宏,例如 NULL
。
二進位常值 (C++14)
使用 0B
或 0b
前置詞,後接一連串的 1 和 0,即可指定二進位常值:
auto x = 0B001101 ; // int
auto y = 0b000001 ; // int
請避免使用常值做為「幻方常數」。
您可以直接在運算式和陳述式中使用常值,雖然這不一定是好的程式設計做法:
if (num < 100)
return "Success";
在上述範例中,較佳的做法是使用具名常數來傳達清楚的意義,例如「MAXIMUM_ERROR_THRESHOLD」。 而且,如果使用者看到傳回值 「Success」,則最好使用具名字串常數。 您可以將字串常數保留在檔案中可當地語系化為其他語言的單一位置。 使用具名常數可協助自己和其他人瞭解程式碼的意圖。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應