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

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

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)
洪涛

3 番目の質問では、MyClass を int に直接置き換えました。
new int はアドレスを返すため、int& は左辺値参照であり、new int からのアドレスは右辺値であり、参照はオブジェクトまたは変数の別名ですが、new int からのアドレスは定数アドレスです。これは int& a = 2 に似た 2 や 3 などの数値に相当しますが、機能しません。右辺値参照を使用すると、int* &&a = new int(2) 経由でコンパイルされます。

いいねを押す +0
小葫芦

型が一致しません。たとえば、MyClass **mc = new MyClass(11); には左側に MyClass ** 型があり、MyClass * に値を割り当てるにはどうすればよいですか?

いいねを押す +0
刘奇

そもそもの理解に問題があります。
1. C クラスのインスタンス化によりポインターが生成されます。
これは間違っています! ! !
一般に、C クラスでは、new はオブジェクトを作成し、そのオブジェクトへのポインターを返します。
2. では、なぜこのポインタはクラス *name でのみ受信できるのでしょうか?

MyClass *mc の mc の型は次のとおりです:
MyClass クラスの オブジェクトへのポインター

new MyClass(11) はポインタを返します。ポインタの型は次のとおりです:
MyClass クラスの オブジェクトへのポインタ

MyClass **mc の mc の型は次のとおりです:
MyClass クラスの オブジェクトのポインタ
2 つのデータ型の違いを比較できますか?
さらに、MyClass *&mc のこのような書き方は見たことがありません。私の理解では、これは文法上の誤りです。

いいねを押す +0
刘奇

左と右の型が一致しないため、割り当ては失敗します

いいねを押す +0
阿神

new MyClass(11); 戻り値の型は Myclass* であり、左辺値と右辺値の型は異なります

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート