按理说指针类型应该还可以用指针的指针**接收,
或者使用指针的引用接收才对。
但是事实上我尝试使用另外两种方法接收实例化结果却失败了。。
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的值会报错。。。有什么办法吗?
針對第三個問題,我直接把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型別不同啊