按理说指针类型应该还可以用指针的指针**接收,
或者使用指针的引用接收才对。
但是事实上我尝试使用另外两种方法接收实例化结果却失败了。。
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的值会报错。。。有什么办法吗?
3 番目の質問では、MyClass を int に直接置き換えました。
new int
はアドレスを返すため、int& は左辺値参照であり、new int からのアドレスは右辺値であり、参照はオブジェクトまたは変数の別名ですが、new int からのアドレスは定数アドレスです。これはint& a = 2
に似た 2 や 3 などの数値に相当しますが、機能しません。右辺値参照を使用すると、int* &&a = new int(2)
経由でコンパイルされます。型が一致しません。たとえば、
MyClass **mc = new MyClass(11);
には左側にMyClass **
型があり、MyClass *
に値を割り当てるにはどうすればよいですか?そもそもの理解に問題があります。
1. C クラスのインスタンス化によりポインターが生成されます。
これは間違っています! ! !
一般に、C クラスでは、new はオブジェクトを作成し、そのオブジェクトへのポインターを返します。
2. では、なぜこのポインタはクラス *name でのみ受信できるのでしょうか?
MyClass *mc の mc の型は次のとおりです:
MyClass クラスの オブジェクトへのポインター。
new MyClass(11) はポインタを返します。ポインタの型は次のとおりです:
MyClass クラスの オブジェクトへのポインタ。
MyClass **mc の mc の型は次のとおりです:
MyClass クラスの オブジェクトのポインタ。
2 つのデータ型の違いを比較できますか?
さらに、MyClass *&mc のこのような書き方は見たことがありません。私の理解では、これは文法上の誤りです。
左と右の型が一致しないため、割り当ては失敗します
new MyClass(11); 戻り値の型は Myclass* であり、左辺値と右辺値の型は異なります