亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

Define,const,static用法總結

2020-01-26 15:47:10
字體:
來源:轉載
供稿:網友

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

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

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

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

關于修飾引用,下面重點說一下:

當輸入普通數據類型時,不需要加const修飾,因為參數本身就是臨時分配到棧空間的拷貝,但若參數是用戶自定義類型或類時,需要引用傳遞,因為可以提高效率。

void fun(A a);    //A為用戶自己定義的類型,這種用法效率低,函數體內產生A類型的臨時對象復制參數a時,該臨時對象的構造、復制、析構過程都將消耗時間。

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

復制代碼 代碼如下:

#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時進行了兩次構造函數(student和person),再調用studentval(pa)函數時,需要創建pa的臨時變量,即調用了兩次拷貝構造函數(student和person),但該函數結束后,創建的臨時變量銷毀,調用了兩次析構函數,而當main函數結束后,pa銷毀又調用了兩次構造函數。共調用了8次函數。若改為引用傳遞,及函數改為:
復制代碼 代碼如下:

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

因為引用傳遞時沒有構造臨時變量,也就不需要另外進行構造和析構了,就整個函數過程只需要4次調用。

另外const修飾引用還可以解決多態中的"切斷"問題,如下面代碼中多態的實現:

復制代碼 代碼如下:

#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;
}


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

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

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

對于局部變量而言,static改變了變量的存儲方式,使其變為靜態存儲,連接方式是內部連接(只能在該文件中使用,局部變量本來就是內部連接了),即局部變量只改變存儲方式,不改變連接方式。對于全局變量而言,則不改變存儲方式(全局變量已經是靜態存儲了),它僅改變其連接類型,全局變量默認是外聯的,即能被其他外部文件直接使用,只需提前聲明extern,若加上static,則只能在本文件使用,即全局變量只改變連接方式,不改變存儲方式。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一福利在线观看| 日本欧美爱爱爱| 欧美午夜视频一区二区| 国产91在线高潮白浆在线观看| 性欧美亚洲xxxx乳在线观看| 国产精品第一视频| 成人性生交大片免费看视频直播| 欧美多人乱p欧美4p久久| 欧美精品videos性欧美| 欧美黄色www| 中文字幕精品一区二区精品| 日韩精品高清视频| 久久精品电影一区二区| 亚洲精品中文字幕av| 日韩在线视频免费观看高清中文| 亚洲综合最新在线| 欧美大片va欧美在线播放| 最近2019年好看中文字幕视频| 欧美中文在线字幕| 国产欧美日韩中文字幕在线| 欧美性猛交xxxx免费看久久久| 欧美成人在线影院| 国产mv久久久| 欧美超级乱淫片喷水| 色黄久久久久久| 亚洲第一男人天堂| 日韩a**站在线观看| 亚洲色图五月天| 欧美午夜精品久久久久久久| 粗暴蹂躏中文一区二区三区| 欧美性视频网站| www国产精品com| 亚洲专区中文字幕| 久久99久国产精品黄毛片入口| 欧日韩不卡在线视频| 国产日韩中文字幕在线| 国外成人免费在线播放| 青草青草久热精品视频在线网站| 国产精品女人网站| 亚洲国产精品资源| 成人免费网站在线观看| 国产精品网站大全| 日韩精品电影网| 成人h视频在线观看播放| 欧美日本中文字幕| 伊人久久五月天| 色噜噜国产精品视频一区二区| 26uuu亚洲伊人春色| 欧美激情18p| 欧美国产日韩一区二区三区| 欧美亚洲一区在线| 91国产美女在线观看| 亚洲国产天堂久久综合网| 中文字幕亚洲欧美在线| 91免费欧美精品| 黑人巨大精品欧美一区二区| 日韩一区二区三区xxxx| 国产精品极品尤物在线观看| 国产视频精品一区二区三区| 成人妇女免费播放久久久| 一区二区欧美激情| 成人免费自拍视频| 日韩精品久久久久| 精品网站999www| 国产女人18毛片水18精品| www.日韩欧美| 日本精品久久久久久久| 97在线免费观看| 欧美日韩成人在线观看| 欧美激情在线视频二区| 91精品国产色综合久久不卡98口| 丝袜美腿精品国产二区| 国产成+人+综合+亚洲欧洲| 国产精品久久久91| 国产成人精品一区二区三区| 欧美精品一本久久男人的天堂| 欧美激情久久久| 日韩精品免费观看| 亚洲а∨天堂久久精品9966| 中文字幕一精品亚洲无线一区| 疯狂欧美牲乱大交777| 2019中文字幕在线观看| 亚洲视频在线观看| 国产精品网红福利| 欧美成人免费观看| 国产日韩av在线| 亚洲人成电影在线| 精品亚洲精品福利线在观看| 国产91在线高潮白浆在线观看| 中文字幕成人在线| 欧美精品在线看| 欧美性猛交99久久久久99按摩| 国产亚洲aⅴaaaaaa毛片| 一区二区成人av| 国产精品自拍视频| 亚洲国产99精品国自产| 91精品国产亚洲| 中文一区二区视频| 亚洲深夜福利网站| 国产欧美日韩免费看aⅴ视频| 一区二区三区精品99久久| 懂色av中文一区二区三区天美| 亚洲伊人第一页| 亚洲欧美精品伊人久久| 欧美性猛交丰臀xxxxx网站| 中文字幕欧美国内| 91中文在线视频| 欧美中文字幕在线| 成人激情视频免费在线| 色yeye香蕉凹凸一区二区av| 91精品久久久久久久久久久久久| 欧美电影免费观看电视剧大全| 日韩在线小视频| 亚洲国产另类 国产精品国产免费| 午夜精品在线观看| 欧美专区日韩视频| 亚洲色图综合久久| 国产精品jizz在线观看麻豆| 精品一区二区三区四区| 精品露脸国产偷人在视频| 欧美精品成人在线| 日韩av毛片网| 欧美最猛性xxxxx(亚洲精品)| 精品福利在线看| 日韩免费av一区二区| www.国产精品一二区| 日韩美女激情视频| 国产成人精品视频在线观看| 亚洲精品一区久久久久久| 青草热久免费精品视频| 国产精品永久在线| 国产+成+人+亚洲欧洲| 日韩精品高清在线| 亚洲欧美综合另类中字| 日本不卡视频在线播放| 久久久精品视频成人| 国产免费一区二区三区在线观看| 热re99久久精品国产66热| 国产一区二区三区在线播放免费观看| 日韩动漫免费观看电视剧高清| 日本视频久久久| 91禁外国网站| 欧美中文字幕视频在线观看| 成人精品福利视频| 国产免费一区二区三区在线观看| 久热在线中文字幕色999舞| 成人欧美在线观看| 日韩一区二区精品视频| 国产亚洲精品va在线观看| 夜夜狂射影院欧美极品| 狠狠做深爱婷婷久久综合一区| 欧美精品亚州精品| 国产精选久久久久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩欧美国产骚| 欧美福利小视频| 91精品国产成人www| 在线观看欧美视频| 欧美性xxxxx| 国产成人91久久精品| 国产精品网站视频| 日本国产精品视频| 91久热免费在线视频| 亚洲国产精久久久久久久|