![]() |
1
24
这不是一个句法问题,而是一个设计问题。你必须指定
根据设计问题,我看到了一些可能的句法方法:
|
![]() |
2
13
在这种情况下,我将使用指针而不是引用。实际上,这个标准(可选或强制返回值)首先是我如何决定指针和引用之间的关系。 |
![]() |
3
6
我可能会这样做:
或许还有:
然后,呼叫者有一些选项:
根据先决条件(即确保函数能够完成其工作的职责),可以对函数的接口进行不同的设计。 如果这是呼叫者的责任,那么他们需要有能力确保这一点。不管怎样,为了安全起见,你可能想检查一下。当所谓的“先决条件”不满足时抛出异常会使它们更像是建议而不是条件,而且如果您不介意在任何地方检查的运行时开销,它可以很好地工作。我通常对前提条件相当不宽容,所以实际上我可以用断言替换条件异常,并记录不能在错误的模式下调用函数。这取决于调用者对模式的控制程度——很明显,如果它是任意改变的(例如,如果“somecondition”是“UART上没有可用的字节”),那么您需要一个非常不同的接口,如果它只是在客户机代码调用某个函数来改变它时才改变的话。
如果调用者没有责任使模式正确,那么您的接口不应该写您的实现不能兑现的支票。在这种情况下,如果“预期”没有要返回的对象,则返回不应通过引用。除非(a)你能发出一个特殊的“对不起,它不起作用”返回对象,呼叫者可以检查,或(b)你可以在“预期”的情况下抛出异常。IMO(B)在C++中是很少见的。(A)通常不会比返回空指针更好,但偶尔也会这样。例如,如果返回一个空集合以表示“这里不允许您看到任何内容”,则可能会导致一些非常干净的调用代码,如果
|
![]() |
4
5
如果不想将返回类型更改为指针,则可以使用 null object pattern |
![]() |
5
5
“我们的对象”的生命周期是什么?它是在哪里创建的? 如果您需要提前返回而不接触/更新我们的对象,并且它存在于您要返回的点上,那么我认为返回对它的引用没有问题。 如果您试图传达出发生了错误,那么您可能需要抛出异常而不是提前返回,因为您的函数同意的契约说它将返回对“someobject”的引用。 如果要返回临时引用,最好修复 那个 问题… |
![]() |
6
5
我将返回一个布尔值,并将对象引用作为参数传递给函数:
在这种情况下,只有当函数返回true时,对象才会被填充。 |
![]() |
7
3
休斯敦大学。。。只是抛出一个例外… |
![]() |
8
3
引发异常 |
![]() |
9
1
只有当我确信函数永远不会失败时,我才会考虑通过引用返回(可能类似于向内部成员变量返回常量引用)。如果函数内部有多个验证,那么我将考虑以下选项之一:
|
![]() |
10
1
如果不想抛出异常,可以尝试如下操作:
这意味着您不必在某个地方放置某种类型的静态变量来返回,而且您仍然可以在没有参数的情况下调用它。我猜您会假设默认的constructed someobject()状态是空状态,这样您就可以测试某个对象,看它是否处于空状态。有时使用它来重写默认返回值也很有用,例如getsomeobject(someobject(“I'm empty”)) |
![]() |
11
1
正好有三个选择…
1。
引发异常
|
![]() |
12
0
我相信答案取决于你是否是那种认为异常是坏的,从不想使用它们的程序员。如果确实使用了它们,而且这确实是一个异常条件,那么必须抛出异常。是的,用户需要处理它,但是隐藏一个错误来假装什么都没有发生是不可能的。 但如果从不使用异常,那么只需返回一个指针或布尔值,并向函数中添加对某个对象的非常量引用。 这两种解决方案都很简单,但谁说过度复杂的事情会使代码变得更好? |
![]() |
13
0
函数的设置方式必须返回
如果
有可能返回某种空对象。指针非常有用,因为有一个明显的空值测试为false,但是您可以将标志作为out参数传递回去,或者返回一个特殊的对象作为空值。然后您需要测试每个调用的返回值,以使其有意义,而且这不可能比
如果我这样做的话,这取决于
|
![]() |
14
0
这与内置C++运算符的情况相同。
|
![]() |
Tono Nam · 无法在golang中通过引用修改对象 2 年前 |
![]() |
uzivanky · 课堂上不同的“this” 6 年前 |
![]() |
Henry Marshall · 通过引用替换JS对象[重构工作代码] 6 年前 |
|
user9441223 · 通过引用传递对象并将其存储为成员变量 7 年前 |
![]() |
Enryu · 参考变量参数vs局部参考变量[关闭] 7 年前 |
![]() |
Tryer · 计算不同类别对象的数量 7 年前 |