&GetListCtrl()这句话为什么函数前边有一个"&"

为什么不干脆写代码:
CListCtrl ctl = GetListCtrl();
或:
CListCtrl ctl;
ctl = GetListCtrl();

无论哪一种写法,似乎更符合我们一般的逻辑思维,但执行结果都是通不过编译的。

正确写法:
CListCtrl* ctl = &GetListCtrl();

CListCtrl& ctl = GetListCtrl();

返回一个CListCtrl类型?返回一个类的实例这是有违C++的编程常理的吧,效率太低了。它返回的是一个CListCtrl的引用,而不是一个CListCtrl.

至于要解释的话,估计楼主看不懂,简单提一点:
C++类的构造函数,如默认构造函数,如果被这样定义
class X {
protected:
X();
};
那么我们不能创建它的实例了:
X x;//导致编译出错
道理是因为构造函数不对外,我们在外面无法使用构造函数。

那么如果CListCtrl的构造函数也是这样做的,是不是就能解释楼主的奇怪问题以及正确答案了呢? 两种正确答案的代码都是力争避开调用不公开的构造函数,这个是写代码的初衷也是答案。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值