国产探花免费观看_亚洲丰满少妇自慰呻吟_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();,當然這有點兒畫蛇添足了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 华阴市| 屯昌县| 永嘉县| 深圳市| 开封县| 东阳市| 晋宁县| 泗洪县| 合江县| 巫溪县| 武川县| 凌海市| 施甸县| 嘉鱼县| 东莞市| 桂林市| 肇源县| 庆阳市| 正阳县| 耿马| 汝州市| 灵石县| 黄石市| 衡东县| 延吉市| 高邑县| 泰顺县| 南和县| 大安市| 含山县| 江陵县| 芮城县| 吉木萨尔县| 龙海市| 阿巴嘎旗| 刚察县| 乌拉特后旗| 潜山县| 玉林市| 开平市| 井冈山市|