欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C “靠近定義變量“之真正原因

在C++中,都知道要“盡量靠近變量實(shí)際使用處進(jìn)行定義”。對此條規則一般的理解是:這是C++對C“函數開(kāi)始處進(jìn)行變量定義”的一種優(yōu)化,目的是方便程序員定義和使用變量。最近學(xué)習時(shí)發(fā)現,這個(gè)規則實(shí)際上和C++“面向對象的編程語(yǔ)言”本質(zhì)密切相關(guān)。
考慮如下的類(lèi)定義和代碼段:

class X
{
public:
  X() : m_number(2);
  ~X();
  void SetNumber(int number){m_number = number;};
  int GetNumber(){return m_number};
private:
  m_number;
};

int main(int argc, char* argv[])
{
  X x1;
  X x2;

  if (x1.GetNumber() == 0)
  {
    return 0; // 第一個(gè)return
  }

  if (x2.GetNumber() == 2)
  {
    return 0; // 第二個(gè)return
  }

  return 0; // 最后的return
}

這段代碼申明了兩個(gè)X的局部變量,x1和x2。如果按照C的申明方式把兩個(gè)變量放在函數的開(kāi)始處,那么,編譯器在每個(gè)return返回處都必須對x1和x2調用析構函數。
如果把代碼改成如下形式:

int main(int argc, char* argv[])
{
  X x1;
  if (x1.GetNumber() == 0)
  {
    return 0; // 第一個(gè)return
  }
  X x2;
  if (x2.GetNumber() == 2)
  {
    return 0; // 第二個(gè)return
  }

  return 0; // 最后的return
}

也就是在使用x2前才申明x2,則第一個(gè)return處編譯器就不用加入對x2析構函數的調用了。

如果函數申明了比較多的對象,而且函數析構的開(kāi)銷(xiāo)比較大,則“使用前才申明”就能可觀(guān)地減小代碼尺寸和運行時(shí)開(kāi)銷(xiāo)。由此觀(guān)之,本條規定的來(lái)源實(shí)際上是:“C++是面向對象的編程語(yǔ)言,編譯器會(huì )插入很多編程者未書(shū)寫(xiě)的代碼來(lái)達成面向對象語(yǔ)義,如果不遵循該規則,這些編譯器添加的代碼會(huì )造成較大的開(kāi)銷(xiāo)”。

C++中,很多似乎無(wú)關(guān)緊要的規則都有其深刻的含義,不是隨便規定的。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=616037

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
全局變量、函數原型和Guard macro
如何優(yōu)化代碼
C 編程最佳實(shí)踐
【C語(yǔ)言】12
淺談數組和指針
Linux內核編譯宏定義修飾作用
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久