国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > C > 正文

Define,const,static用法總結(jié)

2020-01-26 15:47:10
字體:
供稿:網(wǎng)友

1、Define用法:
define主要是用于宏常量定義的,使程序看起來更簡潔明了,方便代碼維護(hù),#define定義的實(shí)質(zhì)只是一個常數(shù)的名字,沒有具體數(shù)據(jù)類型的,沒有分配內(nèi)存空間。在編譯是會被編譯器替換為該常數(shù)。每次使用該宏定義,就要進(jìn)行編譯并分配空間,若一個程序中多次使用define定義的數(shù)據(jù),則就會有多份拷貝。這么做是為了提高程序的可讀性,但安全性相對差點(diǎn)。

2、const用法:
const定義的全局?jǐn)?shù)據(jù)變量,其基本作用和define相同,但又在define的基礎(chǔ)上增加了好多功能。const定義的數(shù)據(jù)在程序開始前就在全局變量區(qū)分配了空間,在程序執(zhí)行的過程中,若用到該數(shù)據(jù),直接讀取就可以,沒必要每次進(jìn)行編譯,整個程序過程中也只有一個拷貝。關(guān)于const用法好多,如:

(1)定義常量
const int a=100;  //定義a為一個全局?jǐn)?shù)據(jù)區(qū)常量
const int *a=&i;   //定義一個指向常量i的指針,其中*a是不能修改的
int * const a=&i;  //定義一個常量指針 ,其中a是不能修改的 
const int * const a=&i; //定義一個指向常量i的常量型指針

(2)const修飾函數(shù)參數(shù)(包括傳值、傳址、引用)
void fun(const int a);       //修飾傳值,但這個用法是沒有用的,因?yàn)閍本身就是要傳入數(shù)據(jù)的一個拷貝,是另分配的內(nèi)存,所以對a的改變,對原先數(shù)據(jù)是沒有影響的
void fun(const int *a);     //修飾傳址,要傳入的數(shù)據(jù)是一個地址,此時若程序中對*a進(jìn)行修改,則原先的數(shù)據(jù)也會跟著修改,所以若不想改變原先數(shù)據(jù)的值,只是希望在函數(shù)中引用該數(shù)據(jù),則需要加const
void fun(const int &a);     //修飾引用,其效用和傳址是一樣的,引用就是給要傳入的數(shù)據(jù)起了一個別名。

關(guān)于修飾引用,下面重點(diǎn)說一下:

當(dāng)輸入普通數(shù)據(jù)類型時,不需要加const修飾,因?yàn)閰?shù)本身就是臨時分配到棧空間的拷貝,但若參數(shù)是用戶自定義類型或類時,需要引用傳遞,因?yàn)榭梢蕴岣咝省?br>
void fun(A a);    //A為用戶自己定義的類型,這種用法效率低,函數(shù)體內(nèi)產(chǎn)生A類型的臨時對象復(fù)制參數(shù)a時,該臨時對象的構(gòu)造、復(fù)制、析構(gòu)過程都將消耗時間。

void fun(const A& a);  //這用用法效率高,引用傳遞不需要產(chǎn)生臨時對象,省了臨時對象的構(gòu)造、復(fù)制、析構(gòu)過程消耗的時間。但光用引用有可能改變a,所以                                             加const。

復(fù)制代碼 代碼如下:

#include <iostream>
#include <string>
using namespace std;

class Person {
public:
    Person()
    {
        cout<<"creat person"<<endl;
    }
    ~Person()
    {
        cout<<"destroy person"<<endl;
    }
    virtual void fun() const
    {
        cout<<"hello person"<<endl;
    }
};

class Student: public Person {
public:
    Student()
    {
        cout<<"create student"<<endl;
    }
    ~Student()
    {
        cout<<"desotry student"<<endl;
    }
    virtual void fun() const
    {
        cout<<"hello sudent"<<endl;
    }
};

bool studentval(Student p)
{
    p.fun();
    return true;
}
int main(int argc,char *argv[])
{
    Student pa;
    cout<<endl;
    studentval(pa);
    cout<<endl;
    return 0;
}


分析:首先聲明Student pa時進(jìn)行了兩次構(gòu)造函數(shù)(student和person),再調(diào)用studentval(pa)函數(shù)時,需要創(chuàng)建pa的臨時變量,即調(diào)用了兩次拷貝構(gòu)造函數(shù)(student和person),但該函數(shù)結(jié)束后,創(chuàng)建的臨時變量銷毀,調(diào)用了兩次析構(gòu)函數(shù),而當(dāng)main函數(shù)結(jié)束后,pa銷毀又調(diào)用了兩次構(gòu)造函數(shù)。共調(diào)用了8次函數(shù)。若改為引用傳遞,及函數(shù)改為:
復(fù)制代碼 代碼如下:

bool studentval(const Student& p)
{
p.fun();   
return true;
}

因?yàn)橐脗鬟f時沒有構(gòu)造臨時變量,也就不需要另外進(jìn)行構(gòu)造和析構(gòu)了,就整個函數(shù)過程只需要4次調(diào)用。

另外const修飾引用還可以解決多態(tài)中的"切斷"問題,如下面代碼中多態(tài)的實(shí)現(xiàn):

復(fù)制代碼 代碼如下:

#include <iostream>
#include <string>
using namespace std;

class Person {
public:
    Person()
    {
        cout<<"creat person"<<endl;
    }
    ~Person()
    {
        cout<<"destroy person"<<endl;
    }
    virtual void fun() const
    {
        cout<<"hello person"<<endl;
    }
};

class Student: public Person {
public:
    Student()
    {
        cout<<"create student"<<endl;
    }
    ~Student()
    {
        cout<<"desotry student"<<endl;
    }
    virtual void fun() const    //勿丟const
    {
        cout<<"hello sudent"<<endl;
    }
};

bool studentval(Person p)
{
    p.fun();
    return true;
}
int main(int argc,char *argv[])
{
    Student pa;
    cout<<endl;
    studentval(pa);
    cout<<endl;
    return 0;
}


按理說調(diào)用studentval(Person p),當(dāng)傳入Student類型的時候,按照多態(tài)應(yīng)該顯示的student的內(nèi)容,即顯示"hello stuent",但結(jié)果顯示的卻是"hello person",說明被切斷了,若改為bool studentval(const Person &p)時,便解決了該問題。

(3)const修飾成員函數(shù)
  void fun(int a) const
(4)const修飾函數(shù)返回值
  const int *fun(int a)

3、static用法:
函數(shù)內(nèi)部定義的變量,在程序執(zhí)行到它的定義處時,編譯器為它在棧上分配空間,大家知道,函數(shù)在棧上分配的空間在此函數(shù)執(zhí)行結(jié)束時會釋放掉,這樣就產(chǎn)生了一個問題: 如果想將函數(shù)中此變量的值保存至下一次調(diào)用時,如何實(shí)現(xiàn)?最容易想到的方法是定義一個全局的變量,但定義為一個全局變量有許多缺點(diǎn),最明顯的缺點(diǎn)是破壞了此變量的訪問范圍(使得在此函數(shù)中定義的變量,不僅僅受此函數(shù)控制)。因此C++ 中引入了靜態(tài)變量static,用它來修飾變量,它能夠指示編譯器將此變量在程序的靜態(tài)存儲區(qū)分配空間保存,這樣即實(shí)現(xiàn)了目的,又使得此變量的存取范圍不變。

對于局部變量而言,static改變了變量的存儲方式,使其變?yōu)殪o態(tài)存儲,連接方式是內(nèi)部連接(只能在該文件中使用,局部變量本來就是內(nèi)部連接了),即局部變量只改變存儲方式,不改變連接方式。對于全局變量而言,則不改變存儲方式(全局變量已經(jīng)是靜態(tài)存儲了),它僅改變其連接類型,全局變量默認(rèn)是外聯(lián)的,即能被其他外部文件直接使用,只需提前聲明extern,若加上static,則只能在本文件使用,即全局變量只改變連接方式,不改變存儲方式。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产一区电影| 国产乱妇乱子在线播视频播放网站 | eeuss影院在线播放| 中文产幕区在线观看| 国产午夜在线| 精品一区二区三区在线观看l| 国产精品186在线观看在线播放| 国产日韩欧美精品一区二区三区| 国产黄在线看| 四虎www视频| 国产三级香港三韩国三级| 国产变态拳头交视频一区二区| 国产二级片在线| а√资源新版在线天堂| 最近高清中文在线字幕在线观看| 最新中文字幕在线| 99在线播放| 国产女王在线**视频 | 国产污视频在线| 香蕉视频在线看| 狠狠狠综合7777久夜色撩人| 992tv在线观看在线播放| 黄色片视频在线观看| 中文在线视频| 国产精品爱久久久久久久小说| 精品欧美日韩一区二区| 天天草天天干| 99热免费观看| 国产私人影院| 国产在线观看av| 免费在线播放av| 香蕉视频在线观看网站| 777电影在线观看| 国产精品日日爱| 国产精品18久久久久久久久久| 国产在线高潮| 国产精品臀控福利在线观看| 免费观看久久久久| 免费看ww视频网站入口| 亚洲精品影院在线| 亚洲欧美精选| 国产95在线|亚洲| 国产高清在线| 国产爆初菊在线观看免费视频网站| 国产永久av在线| 国产麻豆精品入口在线观看| 牛牛热在线视频| 国产中文字幕第一页| 懂色av一区| 国产视频中文字幕在线观看| 国产三级免费观看| 69日小视频在线观看| av在线播放国产| 青草视频在线播放| 国产在线观看18| 国产黄色在线网站| 国产视频97| av在线播放av| 国产美女一区视频| 国产素人视频在线观看| 2020亚洲男人天堂| 狠狠狠综合7777久夜色撩人| 91caoporn在线| 99久热re在线精彩视频| 牛牛在线精品视频| 国产视频二区三区| www.xxx黄| 国产精品毛片一区二区三区四区| 亚洲一区免费在线| 国产精品自产拍在线网站| 国产高清视频在线| 三级小说一区| 国产福利在线看| 高清视频一区二区三区四区| 69视频在线观看| 国产美女在线看| 在线黄色.com| 国产一级片网站| 欧美日韩综合高清一区二区| 国产私拍精品| 黄色国产在线| 日本成a人片在线观看| 国产精品合集一区二区| 日本中文字幕在线视频| 日本欧洲一区| 在线播放国产区| 国产九色porn网址| 欧洲亚洲精品视频| 伊人色综合网| 91美女主播在线视频| 午夜视频免费在线观看| 久久久久久77777| 免费在线高清av| 四虎成人欧美精品在永久在线| 国产色在线播放| 国产美女福利在线观看| av资源网站在线观看| av手机天堂| 在线视频99| 亚洲视频网站在线| 天天草天天爽| 91www在线观看| 999福利在线视频| 中文字幕av免费| av亚洲男人天堂| 四虎精品成人a在线观看| 伊人伊人av电影| 精品国产一区二区三区四区阿崩 | 永久av在线| 精品美女调教视频| 精品成人免费自拍视频| 在线亚洲不卡| 操操操综合网| 四虎成人精品在永久在线观看| av免费在线免费| 免费男女羞羞的视频网站中文字幕| 羞羞视频在线免费看| 日本黄在线观看| 九九热在线观看| 九九99精品| 国产精品国精产品一二| 在线久久视频| 国产特级毛片| 日本一卡二卡四卡精品| www在线观看播放免费视频日本| 青娱乐在线视频观看| 国产专区在线播放| 国产变态拳头交视频一区二区 | 国产福利一区二区在线精品| 亚洲综合色视频在线观看 | 狠狠狠狠狠狠操| 国产porn在线| 国产精品自拍亚洲| 亚洲wwwwww| 国产亚洲精品午夜高清影院| 中文视频在线| 国产天堂素人系列在线视频| 在线观看av网站永久| 亚洲欧美国产另类首页| 天天操人人爽| 人成在线免费视频| 精品国内一区二区三区免费视频 | 四虎a级欧美在线观看| 中文字幕在线免费视频| 在线观看电影av| 91福利在线免费| 亚洲欧美精品日韩欧美| 国产欧美日韩第一页| 黄色国产网站在线观看| av小说在线| 在线免费黄色毛片| 国产三级在线免费| wwww在线观看| 亚洲男人的天堂成人| 精品亚洲综合| 国产jizz| 国产精品久久精品牛牛影视| 黄网在线免费| 国产中文在线| 国产乱视频在线观看| 九九视频在线播放| a视频免费看| www.狠狠操.com| xxxxx中文字幕| 欧美午夜电影一区二区三区| www久久日com| 天堂资源在线中文| 蜜桃视频中文字幕| 国产九九九九| 精品一区二区三区高清免费不卡 | 四虎一区二区三区| 午夜在线观看91| 黄色毛片在线看| 国产一二三区在线| 国产黄在线观看| 69久久精品| 超碰91在线| 国产网站麻豆精品视频| 国产激情自拍| www.蜜桃av| 国产一级片在线播放| 精品无吗乱吗av国产爱色| a视频免费看| 国产一二在线观看| 中文资源在线官网| 国产美女在线看| 亚洲欧美综合乱码精品成人网 | 99在线免费视频| 亚洲永久免费网站| 六月天色婷婷| 国产对白国语对白| 懂色一区二区三区| 精品久久久久一区二区三区| 波多野结衣久久高清免费| 最新超碰在线| 欧美婷婷久久五月精品三区| 国产一二三四| 免费视频中文字幕| 在线视频观看你懂的| 国产网站免费看|