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

首頁 > 編程 > C++ > 正文

C++中const與#define的利弊分析

2020-05-23 13:30:45
字體:
來源:轉載
供稿:網友

C++中const與#define的區別如下:

用#define MAX 255定義的常量是沒有類型的,所給出的是一個立即數,編譯器只是把所定義的常量值與所定義的常量的名字聯系起來,define所定義的宏變量在預處理的時候進行替換,在程序中使用到該常量的地方都要進行拷貝替換;

用const float MAX = 255; 定義的常量有類型名字,存放在內存的靜態區域中,在程序運行過程中const變量只有一個拷貝,而#define 所定義的宏變量卻有多個拷貝,所以宏定義在程序運行過程中所消耗的內存要比const變量的大得多;

用define定義的常量是不可以用指針變量去指向的,用const定義的常量是可以用指針去指向該常量的地址的;

用define可以定義一些簡單的函數,const是不可以定義函數的.

const和#define的利弊,從而推導const的意義;

const和#define都有類似的功能,那就是定義一個“常量”;

想用來替換#define定義常量這種方式。這是一種定義宏的方式。因為宏替換定義常量有一定的缺陷:不做類型檢查,沒有作用域限制(這樣很容易被后續污染)。

#include#includeusingnamespacestd;voidmyfunc1(){#definea 10}voidmyfunc2(){printf("a=%d/n", a);}intmain(){printf("外面打印:a=%d/n", a);myfunc1();myfunc2();system("pause");return0;}

const,define,區別,C++

因為只做字面上的直接替換,全局都有效,所以無論定義在哪里,全局都可以訪問。因為是在預編譯的時候就替換好了(只要有定義,就在預編譯的時候進行全程替換,所以外面里面都可以訪問)。

同時,很容易受到污染。

#include#includeusingnamespacestd;#definea 10voidmyfunc1(){#definea 20printf("myfunc1里面的:a=%d/n", a);}voidmyfunc2(){printf("myfunc2里面的:a=%d/n", a);}intmain(){printf("外面打印:a=%d/n", a);myfunc1();myfunc2();system("pause");return0;}

提示有宏重定義,結果全部都改變為新的:

const,define,區別,C++

宏的方式相當于全局變量,無論在函數里還是函數外命名的時候都要精心雕琢(有點頭痛),否則很容易在以后新的函數中不小心被替換掉,這就是為什么用它定義常量都基本上全部大寫,而變量都弄成小寫,這樣既然不記得有多少宏名了,也不至于沖突。但是它的全局性還是沒有解決。

而const因為有作用域限制,解決了污染全局變量的困擾。

下面的程序是不行的:

#include#includeusingnamespacestd;voidmyfunc1(){constinta =20;printf("myfunc1里面的:a=%d/n", a);}voidmyfunc2(){printf("myfunc2里面的:a=%d/n", a);}intmain(){printf("外面打?。篴=%d/n", a);myfunc1();myfunc2();system("pause");return0;}

const,define,區別,C++

定義個全局的只讀變量:

#include#includeusingnamespacestd;constinta =10;voidmyfunc1(){constinta =20;printf("myfunc1里面的:a=%d/n", a);}voidmyfunc2(){printf("myfunc2里面的:a=%d/n", a);}intmain(){printf("外面打印:a=%d/n", a);myfunc1();myfunc2();system("pause");return0;}

const,define,區別,C++

里面的既不干擾外面的,還可以有優先級之分,同時要做全局也可以做全局。

這樣新做的函數中要想使用a這個名字了,不用考慮什么,直接用就是了。不會影響以前外面定義的全局變量a,是不是省事的多啊。

const是只讀變量,本質上還是變量,是變量就可以傳遞參數,而const還做類型檢查,所以好處更多,如:做形參,可以接收不同的參數,更靈活。

你不能在里面把我的變量給改了吧,可以傳遞不同的變量,因此就曉得更靈活了;

#include#includeusingnamespacestd;voidmyfunc1(constintk){printf("myfunc1里面的數據=%d/n", k);}intmain(){constinta =20;myfunc1(a);constintb =30;myfunc1(b);system("pause");return0;}

const,define,區別,C++

const的應用:

由于是只讀變量,因此保護了外面的實參,外面傳遞實參進來,在函數體里不能修改。因此讓外面的實參得到安全性考慮。

#include#includeusingnamespacestd;voidmyfunc1(constint* k){*k =3;printf("myfunc1里面的數據=%d/n", k);}intmain(){constinta =20;myfunc1(&a);system("pause");return0;}

const,define,區別,C++

宏替換的方式相當于弄全局變量,很容易被污染,沒有作用域限制,做不了優先級區分。它是在預編譯的時候就被替換了。

而const是在編譯的時候才分配變量,有作用域區分,和類型一致的安全性檢測,應用const來開發項目更方便靈活...

宏替換定義的是常量,必定全局有效;

const定義的是只讀變量,有作用域之分,可以做全局的,也可以做局部的,還有優先級之分。既方便又安全,可以代替#define了。那為什么都存在?因為也都有好處,只是想拿各自的好處罷了:

宏替換的方式,讓整個編譯過程變慢(預編譯時間+真正編譯的時間),但是讓程序運行速度變快,因為早已直接替換好了(宏展開),直接運行就得了。

const和它相反,整個編譯時間少,但是程序運行速度慢點了,因為要找內存空間開辟變量...

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品国产三级国产专播精品人| 高清欧美一区二区三区| 91在线视频导航| 国产一区视频在线播放| 中文字幕欧美精品日韩中文字幕| 精品国产老师黑色丝袜高跟鞋| 国产主播在线一区| 亚洲va久久久噜噜噜| 伊人久久久久久久久久| 97色在线观看免费视频| 久久久噜噜噜久久| 尤物精品国产第一福利三区| 精品国产一区二区三区久久狼黑人| 久久久精品一区二区| 亚洲天堂男人天堂女人天堂| 中文字幕亚洲一区| 操91在线视频| 欧美激情视频免费观看| 最近2019年日本中文免费字幕| 亚洲激情成人网| 色噜噜狠狠狠综合曰曰曰| 亚洲xxxx18| 亚洲天堂av女优| 热久久免费国产视频| 久久噜噜噜精品国产亚洲综合| 欧美极品少妇与黑人| 91高清视频免费| 不卡中文字幕av| 久久九九精品99国产精品| 午夜精品三级视频福利| 国产精品成人av在线| 一区二区三区精品99久久| 在线观看免费高清视频97| 亚洲性av网站| 欧美黄色片免费观看| 92福利视频午夜1000合集在线观看| 欧美丝袜美女中出在线| 韩日精品中文字幕| 国产日韩在线一区| 久久精品视频99| 国产精品爱久久久久久久| 91在线播放国产| 国产精品白丝jk喷水视频一区| 亚洲天堂成人在线| 欧美日本高清一区| 国产亚洲一区二区精品| 欧美激情视频一区二区三区不卡| 国产一区二区三区精品久久久| 成人美女av在线直播| 国内精品久久久久| 狠狠躁夜夜躁人人爽超碰91| 亚洲欧美国产精品| 国产精品对白刺激| 91视频免费在线| 亚洲国产精品专区久久| 中文字幕少妇一区二区三区| 精品国产一区二区三区在线观看| 91精品视频在线免费观看| 538国产精品视频一区二区| 日av在线播放中文不卡| 欧美极品美女电影一区| 成人精品一区二区三区电影免费| 欧美性猛交xxxx偷拍洗澡| 日韩av大片免费看| 国产精品美女免费视频| 91精品久久久久久久久不口人| 国产精品大陆在线观看| 国产精品扒开腿做爽爽爽男男| 亚洲自拍高清视频网站| 国产精品色悠悠| 日韩av在线网址| 欧美日韩不卡合集视频| 国内外成人免费激情在线视频网站| 亚洲国产精品视频在线观看| 国产91精品视频在线观看| 久久久久久久网站| 亚洲一区二区三区视频| 91亚洲精品久久久久久久久久久久| 欧美色道久久88综合亚洲精品| 色哟哟亚洲精品一区二区| 久久综合伊人77777| 国产91在线播放精品91| 欧美日韩美女在线| 久久全球大尺度高清视频| 亚洲精品国产精品自产a区红杏吧| 亚洲国产精品久久久久秋霞不卡| 亚洲天堂免费观看| 日韩成人激情视频| 亚洲欧美日韩综合| 久久久久久伊人| 日韩精品福利网站| 国产综合在线视频| 久色乳综合思思在线视频| 亚洲天堂男人天堂女人天堂| 国产精品网站入口| 久久免费观看视频| 97在线视频免费观看| 亚洲欧美日韩国产成人| 久久综合伊人77777蜜臀| 国产一区二区在线免费视频| 日韩女优在线播放| 久久999免费视频| 91精品国产777在线观看| 欧美电影电视剧在线观看| 亚洲国产精品免费| 亚洲色图第三页| 色琪琪综合男人的天堂aⅴ视频| 97香蕉久久夜色精品国产| 欧美最猛黑人xxxx黑人猛叫黄| 欧美精品激情视频| 亚洲国产欧美一区二区三区久久| 日韩毛片中文字幕| 国语自产精品视频在线看一大j8| 欧美一区视频在线| 日韩一区二区av| 亚洲韩国欧洲国产日产av| 久久最新资源网| 欧美成人午夜激情| 日韩女优人人人人射在线视频| 久久人人爽人人爽人人片av高请| 亚洲有声小说3d| 久久免费视频这里只有精品| 久久久人成影片一区二区三区| 久久成人亚洲精品| 国产精品视频最多的网站| 欧美性感美女h网站在线观看免费| 国产精品普通话| 成人网在线免费看| 国产日产欧美a一级在线| 国产日韩欧美91| 亚洲精品成a人在线观看| 欧美xxxx做受欧美.88| 欧美性猛交xxxxx免费看| 久久夜色精品亚洲噜噜国产mv| 欧美日韩精品二区| 欧美黄色三级网站| 国模精品一区二区三区色天香| 韩国精品久久久999| 久久久久亚洲精品| 国产精品偷伦一区二区| 日韩av在线网址| 久久天天躁狠狠躁夜夜av| 久久久久成人精品| 日韩经典中文字幕| 久久精品国产2020观看福利| 日韩欧美国产中文字幕| 国产精品精品久久久久久| 欧美日韩综合视频网址| 欧美精品手机在线| 久久久久久久久久久免费| 高清欧美性猛交| 久久久久久国产精品美女| www.日韩系列| 欧美老女人在线视频| 久久久亚洲福利精品午夜| 日韩av电影免费观看高清| 亚洲国产欧美一区二区三区同亚洲| 久久综合亚洲社区| 草民午夜欧美限制a级福利片| 日韩第一页在线| 久久成人一区二区| 国语自产精品视频在线看一大j8| 亚洲欧美日韩网| 亚洲一区精品电影|