C++类实例化生成的是指针,那么为什么该指针只能用class *name接收呢?
ringa_lee
ringa_lee 2017-04-17 14:27:35
0
5
577

按理说指针类型应该还可以用指针的指针**接收,
或者使用指针的引用接收才对。
但是事实上我尝试使用另外两种方法接收实例化结果却失败了。。

MyClass *mc = new MyClass(11);
MyClass **mc = new MyClass(11);  //错误
MyClass *&mc = new MyClass(11);  //错误

我想问一下为什么这么做不行呢? 还是说我的写法有什么问题?


2016/8/9
感谢各位大大的回答, 第二条问题已解决 可改为

  MyClass *mc = new MyClass(11);
  MyClass **mmc = &mc;  

补充说明:第三条问题语法检测是没错的,我的思路是用指针的引用接收,ide并没有错误提示,但是编译无法通过...
我改为采用第二种方式

 MyClass *mc = new MyClass(11);
 MyClass *&mmc = mc;

这样却没问题,为什么一开始new返回的指针无法用引用来处理呢?
还有。。 第二种方法直接&new的值会报错。。。有什么办法吗?

ringa_lee
ringa_lee

ringa_lee

全部回覆(5)
洪涛

針對第三個問題,我直接把MyClass換成的int。
因為new int回傳的是位址啊,int& 是左值引用,而new int出來的位址是一個右值,引用是物件或變數的別名,但new int出來的則是常數位址啊,相當於一個數,例如2或3吧,類似int& a = 2, 這樣不行的。用右值引用可以編譯通過int* &&a = new int(2)

小葫芦

類型不符啊,例如MyClass **mc = new MyClass(11);,左邊是MyClass **類型,右邊是MyClass *類型,怎麼賦值呢

刘奇

你的理解一開始就有問題。
1.C++類別實例化產生的是指標。
這是錯的! ! !
一般應該這樣理解,C++類,new出一個對象,回傳一個指向該對象的指針。
2.那為什麼該指標只能用class *name接收呢?

MyClass *mc中mc的類型是:
指向MyClass類別的物件的指標

new MyClass(11)回傳的是一個指針,指標型別是:
指向MyClass類別的物件的指針

而MyClass **mc中的mc的類型是:
指向MyClass類別的物件的指標的指標
你比較一下兩個資料型別有什麼不同
另外,MyClass *&mc,這種寫法,沒看過。照我理解,這是文法錯誤。

刘奇

左右型別不同意,賦值失敗

阿神

new MyClass(11);回傳型別是 Myclass*,,lvalue和rvalue型別不同啊

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!