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

浏览:23日期:2023-04-21

问题描述

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

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的值会报错。。。有什么办法吗?

问题解答

回答1:

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

回答2:

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

回答3:

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

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

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

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

回答4:

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

回答5:

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

相关文章: