国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

小心C++編譯器給我們帶來的麻煩

2019-11-17 05:26:07
字體:
來源:轉載
供稿:網友
友情推薦:王朝末代 C++真的衰落了?

  有下面一個簡單的類:

class ClxTest
{
 public:
  ClxTest(int iSize = 13) { pszStr = new char[iSize]; };
  ~ClxTest() { if(pszStr) delete pszStr; };
  lxOutput() { cout << pszStr << endl; };

 PRivate:
  char *pszStr;
};
  現在有下面的兩行代碼:

ClxTest *pTest = new ClxTest();
ClxTest *pTest = new ClxTest;
  我想大家都知道,兩種方法的效果都是一樣的--都是聲明了一個指向類ClxTest的對象的指針,而在創建對象的時候,都是調用了類的默認構造函數。

  可是大家知道下面兩行代碼的區別嗎?

ClxTest lxTest;
ClxTest lxTest();
  假如你認為,這兩行代碼都是聲明了一個類ClxTest的對象,在創建對象的時候也都是調用了類的默認構造函數的話,那你就大錯特錯了!不相信?那你可以試試下面的代碼:

ClxTest lxTest();
lxTest.lxOutput();
  也許你認為上面的代碼沒有什么問題,可是事實是這些代碼根本不能通過編譯!因為C++編譯器把ClxTest lxTest();這行代碼當成了一個函數聲明!這個函數的名字是lxTest,沒有參數,返回值的類型是ClxTest!

  很令人吃驚,對吧?但是這卻與C++中的一條普遍規律相符和--盡可能地解釋為函數聲明。

  假如說你不知道這些的話,當代碼編譯不通過時,你肯定會百思不得其解,也許要花好長時間也找不出錯誤在什么地方。當然,假如你的代碼是下面的形式,就不會出現編譯錯誤了。

ClxTest lxTest(13);
lxTest.lxOutput();
  因為,你指定了類構造函數的參數值,C++編譯器不能將ClxTest lxTest(13);這行代碼解釋為函數聲明,它就會去尋找合適的解釋而去調用類的構造函數來創建對象。

  假如我們在創建類的對象時想使用構造函數的默認參數值,那么除了ClxTest lxTest;的聲明方式外,還有一種聲明方式ClxTest lxTest = ClxTest();,當然這有點兒畫蛇添足了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南阳市| 宿松县| 六盘水市| 枞阳县| 宁晋县| 河南省| 视频| 武清区| 宁化县| 漾濞| 青河县| 来凤县| 临沂市| 徐州市| 阿巴嘎旗| 绍兴市| 轮台县| 镇坪县| 安化县| 瑞昌市| 台东市| 东乡族自治县| 金阳县| 枞阳县| 沈阳市| 乐平市| 盈江县| 红桥区| 德令哈市| 朝阳县| 珲春市| 青田县| 浦东新区| 正镶白旗| 泗洪县| 庄浪县| 高清| 湟源县| 灌阳县| 会理县| 鄯善县|