cosnt成員資料的初始化

巴斯比男孩發表於2020-12-11

原文連結

const可以用來宣告常量也就是說他的值不能被修改;
const成員必須在定義的時候同時初始化,不能進行賦值  

如 const int a;a的值不能修改,不能給它賦值,如何才能讓它一開始就擁有一個值?

1、在宣告的時候對他進行初始化

const int a=1;

2、在函式中宣告的形參,在函式被呼叫時會得到實參的值。

但是如果在類中呢?

class Demo
{
    const int ci;
public:
    void get_ci()
    {
    return ci;
    }
};

當直接用這個類定義一個物件時,會出錯,提示沒有初始化const成員變數值 且提示ci是一個只讀的變數。

const用於類中成員變數時,將類成員變為只讀屬性(只讀:不能出現在“=”的左邊,但在類中仍可以用一個指標來修改其值。) 所以不可以直接在類的建構函式中初始化const 的成員

const成員變數只可以初始化列表中初始化
程式碼:

#include<iostream>
using namespace std;
class Demo
{
private:
    const int ci;
public:
    Demo() :ci(10)
    {

    }
    int getci()
    {
        return ci;
    }
    int setci(int i)
    {
        int* mi =(int *) &ci;
        *mi = i;
        return ci;
    }
};
int main()
{
    Demo d;
    cout << "ci=" << d.getci();

    d.setci(90);
    cout << "ci=" << d.getci();

    getchar();
    return 0;
}

初始化列表是先於建構函式的函式體執行

並且成員的初始化列表與成員的宣告順序相同的

C語言中的const其實只是只讀變數可以用指標間接改變其值

const修飾的區域性變數在棧上分配記憶體空間

const修飾的全域性變數在只讀儲存區分配內儲存空間

#include <stdio.h>


int main(void)
{
    const int a=0;
    int *p= &a;
    *p=5;
    printf("*p=%d\n",*p);//5
    printf("a=%d \n",a);//5
    printf("&a=%p p=%p",&a,p);//相同
    return 0;
}

相關文章