Maison  >  Questions et réponses  >  le corps du texte

C++类实例化生成的是指针,那么为什么该指针只能用class *name接收呢?

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

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_leeringa_lee2764 Il y a quelques jours575

répondre à tous(5)je répondrai

  • PHP中文网

    PHP中文网2017-04-17 14:29:35

    针对第三个问题,我直接把MyClass换成的int。
    因为new int返回的是地址啊,int& 是左值引用,而new int出来的地址是一个右值,引用是一个对象或者变量的别名,但是new int出来的是一个常量地址啊,相当于一个数,比如2或者3吧,类似于int& a = 2, 这样不行的。用右值引用可以编译通过int* &&a = new int(2)

    répondre
    0
  • 高洛峰

    高洛峰2017-04-17 14:29:35

    类型不匹配啊,比如MyClass **mc = new MyClass(11);,左边是MyClass **类型,右边是MyClass *类型,怎么赋值呢

    répondre
    0
  • 怪我咯

    怪我咯2017-04-17 14:29:35

    你的理解一开始就有问题。
    1.C++类实例化生成的是指针。
    这是错的!!!
    一般应该这样理解,C++类,new出一个对象,返回一个指向该对象的指针。
    2.那么为什么该指针只能用class *name接收呢?

    MyClass *mc中mc的类型是:
    指向MyClass类的对象的指针

    new MyClass(11)返回的是一个指针,指针类型是:
    指向MyClass类的对象的指针

    而MyClass **mc中的mc的类型是:
    指向MyClass类的对象的指针的指针
    你对比一下两个数据类型有什么不同
    另外,MyClass *&mc,这种写法,没见过。按我理解,这是语法错误。

    répondre
    0
  • 怪我咯

    怪我咯2017-04-17 14:29:35

    左右类型不同意,赋值失败

    répondre
    0
  • 阿神

    阿神2017-04-17 14:29:35

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

    répondre
    0
  • Annulerrépondre