日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量)

發(fā)布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C++ 中,常量類似于變量,只是不能修改。與變量一樣,常量也占用內(nèi)存空間,并使用名稱標識為其預留的空間的地址,但不能覆蓋該空間的內(nèi)容。

常量可以是任何的基本數(shù)據(jù)類型,可分為整型數(shù)字、浮點數(shù)字、字符、字符串和布爾值。在 C++ 中,常量可以是:

  • 字面常量;
  • 使用關(guān)鍵字 const 聲明的常量;
  • 使用關(guān)鍵字 constexpr 聲明的常量表達式( C++11 新增的);
  • 使用關(guān)鍵字 enum 聲明的枚舉常量;
  • 使用 #define 定義的常量(已摒棄,不推薦);

1. 字面常量

字面常量可以是任何類型:布爾型、整型、浮點型、字符、字符串等。

1.1 整型常量

整型常量可以是十進制、八進制或十六進制的常量。前綴指定基數(shù):

  • 0x0X 表示十六進制;
  • 0 表示八進制;
  • 不帶前綴則默認表示十進制;

整數(shù)常量也可以帶一個后綴,后綴是 UL 的組合:

  • U 表示無符號整數(shù)( unsigned );
  • L 表示長整數(shù)( long );

后綴可以是大寫,也可以是小寫, UL 的順序任意。下面列舉幾個整數(shù)常量的實例:

212         // 合法的
215u        // 合法的
0xFeeL      // 合法的
078         // 非法的:8 不是八進制的數(shù)字
032UU       // 非法的:不能重復后綴

以下是各種類型的整數(shù)常量的實例:

85         // 十進制
0213       // 八進制 
0x4b       // 十六進制 
30         // 整數(shù) 
30u        // 無符號整數(shù) 
30l        // 長整數(shù) 
30ul       // 無符號長整數(shù)

1.2 浮點常量

浮點常量由整數(shù)部分、小數(shù)點、小數(shù)部分和指數(shù)部分組成。您可以使用小數(shù)形式或者指數(shù)形式來表示浮點常量。

  • 當使用小數(shù)形式表示時,必須包含整數(shù)部分、小數(shù)部分,或同時包含兩者。
  • 當使用指數(shù)形式表示時, 必須包含小數(shù)點、指數(shù),或同時包含兩者。帶符號的指數(shù)是用 e 或 E 引入的。

下面列舉幾個浮點常量的實例:

3.14159       // 合法的 
314159E-5L    // 合法的 
510E          // 非法的:不完整的指數(shù)
210f          // 非法的:沒有小數(shù)或指數(shù)
.e55          // 非法的:缺少整數(shù)或分數(shù)

1.3 布爾常量

布爾常量共有兩個,它們都是標準的 C++ 關(guān)鍵字:

  • true 值代表真;
  • false 值代表假;

1.4 字符常量

字符常量是括在單引號中。

  • 如果常量以 L (僅當大寫時)開頭,則表示它是一個寬字符常量(例如 L'x' ),此時它必須存儲在 wchar_t 類型的變量中;
  • 否則,它就是一個窄字符常量(例如 x ),此時它可以存儲在 char 類型的簡單變量中;

字符常量可以是一個普通的字符(例如 'x' )、一個轉(zhuǎn)義序列(例如 '\t'),或一個通用的字符(例如 '\u02C0')。

C++ 中,有一些特定的字符,當它們前面有反斜杠時,它們就具有特殊的含義,被用來表示如換行符( \n )或制表符( \t )等。下表列出了一些這樣的轉(zhuǎn)義序列碼:

轉(zhuǎn)義序列含義
\\\ 字符
\’’ 字符
\"" 字符
\?? 字符
\a警報鈴聲
\b退格鍵
\f換頁符
\n換行符
\r回車
\t水平制表符
\v垂直制表符
\ooo一到三位的八進制數(shù)
\xhh . . .一個或多個數(shù)字的十六進制數(shù)

1.5 字符串常量

字符串字面值或常量是括在雙引號 "" 中的。一個字符串包含類似于字符常量的字符、普通的字符、轉(zhuǎn)義序列和通用的字符。

可以使用空格做分隔符,把一個很長的字符串常量進行分行。

下面的實例顯示了一些字符串常量。下面這三種形式所顯示的字符串是相同的。

"hello, dear""hello, \dear""hello, " "d" "ear"

2. 使用 const 將變量聲明為常量

從實用和編程的角度看,最重要的 C++ 常量類型是在變量類型前使用關(guān)鍵字 const 聲明的。通用的聲明方式類似于下面這樣:

const type variable = value;

或者

type const variable = value;

兩者是等價的,即 const int a = 1int const a = 1 等價。
代碼示例:

#include <iostream>
using namespace std;int main()
{const int  LENGTH = 10;const int  WIDTH  = 5;const char NEWLINE = '\n';int area;  area = LENGTH * WIDTH;cout << "area is " << area << endl;cout << "newline " << NEWLINE;return 0;
}

3. 使用 constexpr 定義常量表達式

C++11 中 , 要求 constexpr 函 數(shù) 體 只 能 包 含 一 條 return語句。

通過關(guān)鍵字 constexpr ,可讓常量聲明像函數(shù):

constexpr double GetPi() {return 22.0 / 7;}

在一個常量表達式中,可使用另一個常量表達式:

constexpr double TwicePi() {return 2 * GetPi();}

使用示例:

#include <iostream>
using namespace std;constexpr double GetPI() { return 22.0/7; }
constexpr double TwicePI() { return 2 * GetPI(); }int main()
{const double PI = 22.0/7;cout << "PI is " << PI << endl;cout << "constexpr GetPI is " << GetPI() << endl;cout << "constexpr TwicePI is " << TwicePI() << endl;return 0;
}

GetPI()TwicePI() 看起來像函數(shù),但其實不是函數(shù)。函數(shù)在程序執(zhí)行期間被調(diào)用,但 GetPI()TwicePI() 是函數(shù)表達式,編譯器將每個 GetPI() 都替換成了3.14286,并將每個 TwicePI() 都替換成了6.28571。通過在編譯階段對 TwicePI() 進行解析,程序的執(zhí)行速度比將這些計算放在函數(shù)中時更快。

4. 使用關(guān)鍵字 enum 聲明的枚舉常量

枚舉類型( enumeration )是 C++ 中的一種派生數(shù)據(jù)類型,它是由用戶定義的若干枚舉常量的集合。

如果一個變量只有幾種可能的值,可以定義為枚舉( enumeration )類型。所謂"枚舉"是指將變量的值一一列舉出來,變量的值只能在列舉出來的值的范圍內(nèi)。

創(chuàng)建枚舉,需要使用關(guān)鍵字 enum 。枚舉類型的一般形式為:

enum 枚舉名{ 標識符[=整型常數(shù)], 標識符[=整型常數(shù)], 
... 標識符[=整型常數(shù)]
} 枚舉變量;

如果枚舉沒有初始化, 即省掉"=整型常數(shù)"時,則從第一個標識符開始。
例如,下面的代碼定義了一個顏色枚舉,變量 c 的類型為 color。最后,c 被賦值為 “blue”。

enum color { red, green, blue 
} c;
c = blue;

默認情況下,第一個名稱的值為 0,第二個名稱的值為 1,第三個名稱的值為 2,以此類推。但是,您也可以給名稱賦予一個特殊的值,只需要添加一個初始值即可。例如,在下面的枚舉中,green 的值為 5。

enum color { red, green=5, blue 
};

在這里,blue 的值為 6,因為默認情況下,每個名稱都會比它前面一個名稱大 1,但 red 的值依然為 0。

#include <iostream>using namespace std;enum days 
{Mon,Tue,Wed,Thu,Fri,Sat,Sun,
} day;int main()	
{day = Sun;if (day == Sun){cout << "a is sunday" << endl;}return 0;
}

或者

#include <iostream>using namespace std;enum days 
{Mon,Tue,Wed,Thu,Fri,Sat,Sun,
} day;int main()	
{enum days today = Mon; // 聲明新的枚舉變量if (today == Mon){cout << "a is Monday" << endl;}return 0;
}

5. 使用 #define 定義常量

首先,也是最重要的是,編寫新程序時,不要使用這種常量。這里介紹使用 #define 定義常量,只是為了幫助您理解一些舊程序,它們使用下面的語法定義常量:

#define pi 3.14286

#define 是一個預處理器宏,讓預處理器將隨后出現(xiàn)的所有 pi 都替換為3.14286。預處理器將進行文本替換,而不是智能替換。編譯器既不知道也不關(guān)心常量的類型。

注意:使用 #define 定義常量的做法已被廢棄,因此不應采用這種做法。

總結(jié)

以上是生活随笔為你收集整理的C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。