色www,五月婷婷深爱五月,午夜国产一级片,色噜噜综合,国产大胸无码视频,清纯美女被操黄网站在线观看,波多野结衣av高清一区二区三区

成功離你只有一步之遙作文

時間:2025-11-09 18:14:39 成功 我要投稿

成功離你只有一步之遙作文

  這個面試問題幾乎是C++面試中每次都會有的題目。 事實(shí)上這個概念誰都有只是三種聲明方式非常相似很容易記混。 Bjarne在他的The C++ Programming Language里面給出過一個助記的方法: 把一個聲明從右向左讀。 const

成功離你只有一步之遙作文

  char * const cp; ( * 讀成 pointer to )

  cp is a const pointer to char

  const char * p;

  p is a pointer to const char;

  char const * p;

  同上因?yàn)镃++里面沒有const*的運(yùn)算符,所以const只能屬于前面的類型。

  拓展:

  (1) 一般用途的const變量,絕對不應(yīng)該聲明在頭文件,定義在cpp里,尤其是基礎(chǔ)類型(int之類)這個和inline函數(shù)是類似的,編譯器能自動處理不同cpp中有同樣const的問題;如果不使用const變量的地址,這個const變量最終會被完全優(yōu)化掉,不占靜態(tài)存儲空間。而如果定義成 extern,會導(dǎo)致編譯器不得不為這個變量分配一個地址,并且在使用的時候強(qiáng)制地去從地址取得值,這會導(dǎo)致極大的性能下降。比如:

  const int a = 16;

  inline int sqr(x)

  {

  return a * a;

  }

  myFunc(sqr(a));

  在這里,編譯器可以把整個sqr(a)都優(yōu)化掉,替換成一個立即數(shù)256。而如果a定義成了extern,這里就必須是讀數(shù)值、乘法、傳參數(shù)的過程了。

  C++中編譯器對于const變量做了充分的優(yōu)化,它完全可以取代#define常量的一切功能。

  比如:

  const int MAX_N = 100;

  int myArray[MAX_N];

  在遇到使用const變量的時候,編譯器如果已知const變量的值,就會直接把值代入進(jìn)行優(yōu)化,和#define是完全一樣的。如果最后const變量沒有取地址之類的操作,編譯器就會認(rèn)為這個變量沒有被實(shí)際引用,于是在生成代碼的最后把整個const變量去掉。

  const變量如果不另加定義,默認(rèn)就是static的。特意去定義成extern只會破壞編譯器效率。這個和C是完全不同的,所以不要把C的法則想當(dāng)然地用進(jìn)來。

  不過對于const變量類型是復(fù)雜類型(類)的時候,static的類型可能會導(dǎo)致每個cpp里面都生成一個對象,這時候應(yīng)該考慮extern。

  (2) const變量和#define宏相比最大的好處其實(shí)不在于類型檢查,而在于可以有命名空間

  namespace MyNameSpace

  {

  #define myMacro 15

  class MyClass

  {

  public:

  const static int myConst = 15;

  #define myMacro2 16

  }

  const int myConst2 = 16;

  }

  myConst必須用MyNameSpace::MyClass::myConst來引用,myConst2對應(yīng) MyNameSpace::myConst2,而#define的兩個常量永遠(yuǎn)都是myMacro和myMacro2,這意味著#define的常量重名的可能性要大得多,而且很容易破壞OOP結(jié)構(gòu)。

  (3) 特殊情況下#define和const比可能會引起問題。比如函數(shù)重載:

  void myFunc(int x)

  {

  ...

  }

  void myFunc(short x)

  {

  ...

  }

  const short myConst = 128;

  #define myMacro 128

  myFunc(myConst);

  myFunc(myMacro);

  #define由于沒有類型,會去調(diào)用int版本的函數(shù)。這是const強(qiáng)制類型檢查的好處

  (4) const類型的編譯效率比較好

  因?yàn)榫幾g器在編譯的時候已經(jīng)知道這個符號對應(yīng)的是某類型的數(shù)了,編譯會快一些。對運(yùn)行影響不大。還有:

  #define MAXN (12*14)

  const int MAX_N = 12 * 14;

  使用MAXN的時候,編譯器每次都得對表達(dá)式求值;MAX_N的話,只求了一次。

  (5) const類型不容易出錯

  這個問題是老生常談了,#define MACRO 12+13這種寫法會出問題,必須加括號。const就沒這個問題。

  (6) enum

  enum其實(shí)可以看做是定義了一族const變量。它們同樣也有命名空間,同樣也有變量類型(不過變量類型是enum XXX),額外的,enum定義的常量不會使用額外的內(nèi)存空間。缺點(diǎn)在于:enum定義的常量,類型是enum XXX,不是int。雖然可以和int型數(shù)值無限制地轉(zhuǎn)換,但畢竟不是int,使用上不是那么方便,比如不能直接做加減乘除之類。

  (7) #define的優(yōu)勢

  #define在C++中的作用一般已經(jīng)不是定義常量或者宏了,如前文所說這些功能應(yīng)該由const和inline函數(shù)來代替。#define在C++中可以用來定義一些快捷語法,或者是根據(jù)編譯選項(xiàng)不同生成不同內(nèi)容:

  #define L(x) L##x

  L("abcde") /pic/p>

  #ifdef _UNICODE

  #define MyFunc MyFuncW

  #else

  #define MyFunc MyFuncA

  #endif

  這些功能目前還沒有其他語法可以替代。

【成功離你只有一步之遙作文】相關(guān)文章:

想要成功只有努力作文07-16

只有堅(jiān)持才會成功02-19

只有勤奮,才能成功02-19

只有準(zhǔn)備才能成功作文(通用17篇)08-17

只有吃盡苦頭才能迎來成功作文(精選16篇)07-04

一步之遙的文明作文02-06

[經(jīng)典]一步之遙的文明作文04-06

只有堅(jiān)持不懈才會取得成功!06-08

只有付諸努力,才會收獲成功作文(通用25篇)12-11

只有努力才能成功優(yōu)秀作文600字(精選20篇)01-06

  • 相關(guān)推薦