C和C 的區別(1)常量和唯讀變數 陣列定義

2021-10-25 05:19:09 字數 1241 閱讀 9348

目錄

1,字面值和唯讀變數

2,const

3,constexpr

在c++中,常量包括字面值和唯讀變數:

int a=12345;

const int b=123;

這裡,12345是字面值,a是變數,b是唯讀變數。

12345是常量,b是常量,a不是常量。

在c中,常量只包括字面值,唯讀變數不是常量。

上述**在c語言的解讀是,12345是常量,b不是常量。

c和c++中,定義陣列的大小都只能用常量。

所以c++有2種定義陣列的方法:

const int b=123;

int c[123];

int d[b];

這2中寫法都是正確的。

但是在c語言中,上述d陣列如果是全域性變數就是非法的,如果是區域性變數那就是可變長陣列。

關鍵字const叫做限定符,因為它限定了宣告的含義。

const變數是區分編譯期常量和執行期常量

const int b=123;

int d[b];

這是的b編譯期常量

int f(int a)

用執行期常量給array物件分配空間是不行的,必須用編譯期常量才行。

總之,const變數是區分編譯期常量和執行期常量的,,而字面值當然都是編譯期常量。

先看如下**:

#include#include using namespace std;

const int f(int a)

int main()

編譯不過是因為,f(5)是執行期常量,而array需要的是編譯期常量

把const換成constexpr之後:

#include#include using namespace std;

constexpr int f(int a)

int main()

這樣,5和b是編譯期常量,所以f(5)和f(b)是編譯期常量,而f(a)和f(c)都不是編譯期常量,所以不能用來分配array物件。

總之,constexpr的作用是,在能返回編譯期常量的條件下,就返回編譯期常量。

C 中常量和唯讀變數的區別小結

常量和唯讀變數有以下區別 1.常量必須在宣告時就被初始化,指定了值www.cppcns.com後就不能修改了.唯讀字段可以在宣告時被初始化,也可以在建構函式中指定初始化的值,在構造以後值就不能修改.2.常量是靜態的,而唯讀字段可以是靜態和動態的 3khpvftaq.const可以用在字段www.cp...

常量和唯讀欄位的區別

總結一下常量和唯讀欄位的區別 一 值的區別 常量 const 是已知的,不能修改的值。const 都是靜態的,不能使用 static 修飾。唯讀字段 readonly 不能修改的 唯讀欄位的值不能在編譯時確定,而是在執行時確定的。readonly 可以用static 修飾,也可以不用。二 賦值方法區...

C 變數和常量

變數和常量是用來在程式中表示資料的。常量是指取值在程式的執行過程中始終保持不變的量,又分為文字常量 literal constant 和常變數 也稱 符號常量 本節將分三小節來介紹。變數 在程式中是指可以改變值的量。變數名 用於標識變數的識別符號。而且變數必須用識別符號進行標識。變數的型別 變數有型...