“MyClass& func1(void)”和“MyClass* func2(void)”之间的区别 [重复]
Posted
技术标签:
【中文标题】“MyClass& func1(void)”和“MyClass* func2(void)”之间的区别 [重复]【英文标题】:Difference between "MyClass& func1(void)" and "MyClass* func2(void)" [duplicate] 【发布时间】:2010-10-22 15:20:25 【问题描述】:可能重复:What is the proper way to return an object from a C++ function ?
你好,
我想知道以下两个函数在返回类型方面有什么区别?
-
MyClass& func1(void)
MyClass* func2(void)
我一直认为这会是一样的吗?
海因里希
【问题讨论】:
一个返回引用,后一个指针,parashift.com/c++-faq-lite/references.html @sbi 这个问题似乎与此不同。这似乎是“指着蛋糕和吃蛋糕有什么区别?我以为是一样的!”另一个似乎是“当我想从朋友那里得到一块蛋糕时该怎么办?问他还是直接吃掉?”。所指出的问题(没有双关语)中没有任何内容可以回答这个问题。我宁愿否决这个问题,因为它“不是一个真正的问题”。有什么区别?词汇的? “一种用途,另一种用途*”。句法一? “一个使用引用,另一个使用指针”。两者的用例? 感谢您的回答。所以如果我创建一个 std::map第一个只能返回对单个对象的引用,并且不能为空。或者更确切地说,它不应该为空。
第二个可能是返回指向单个对象或对象数组的指针。
如果您希望返回一个不能为空的对象,#1 往往是首选形式。在可以返回 null 的情况下,必须使用 #2。一些 API 根本不返回引用(如 QT)。
然而,这只是语法上的区别。这两种类型在编译代码中的处理方式完全相同:将使用指向对象(或数组)的指针。也就是说,严格来说,引用符号 & 没有在普通指针上添加新的语义功能。
(这可能只是总结了其他人写的东西)
【讨论】:
【参考方案2】:第一个返回对对象(或其地址)的引用。另一个返回指针,而不是引用
主要区别:第二个可以返回NULL
【讨论】:
另一个主要的,第二个可以返回指向整个对象数组的指针。 你也可以返回一个空引用,但这很丑。 没有这样的东西.. NULL 引用.. 你可以返回 0x00,这是地址零,但它不是 NULL ref。以上是关于“MyClass& func1(void)”和“MyClass* func2(void)”之间的区别 [重复]的主要内容,如果未能解决你的问题,请参考以下文章