gpt4 book ai didi

c++ - 将可修改的参数传递给 C++ 函数

转载 作者:可可西里 更新时间:2023-11-01 18:01:46 26 4
gpt4 key购买 nike

假设我想给一个函数传递一个可修改的参数,我应该选择什么:通过指针传递还是通过引用传递?

  1. bool GetFoo ( Foo& whereToPlaceResult );
  2. bool GetFoo ( Foo* whereToPlaceResult );

我问这个是因为我一直认为通过引用传递参数是最佳实践 (1),但在检查了一些本地代码数据库后,我得出结论,最常见的方法是 (2)。此外,该人本人 (Bjarne Stroustrup) 建议使用 (2)。 (1) 和 (2) 的[缺点]优点是什么,还是只是个人品味问题?

最佳答案

在以下情况下,我更喜欢引用而不是指针:

  • 不能为空
  • 不能更改(指向其他内容)
  • 它不能被删除(由接收到指针的人)

虽然有人说引用和 const 引用之间的区别对很多人来说太微妙了,并且在调用该方法的代码中是不可见的(即,如果您阅读通过引用传递参数的调用代码,您看不到它是 const 还是非 const 引用),因此您应该将其设为指针(以便在调用代码中明确表示您正在放弃变量的地址,因此变量的值可能会被被调用者更改)。

我个人更喜欢引用,原因如下:

  1. 我认为例程应该知道它调用的是哪个子例程
  2. 子例程不应该假设任何有关调用它的例程的信息。

[1.] 暗示使调用者可见可变性并不重要,因为调用者应该已经(通过其他方式)了解子例程的作用(包括它将修改参数的事实)。

[2.] 意味着如果它是一个指针,那么子例程应该处理参数是空指针的可能性,这可能是额外的和 IMO 无用的代码。

此外,每当我看到一个指针时,我就会想,“谁将在何时删除它?”,因此无论何时何地所有权/生命周期/删除都不是问题,我更喜欢使用引用。

就其值(value)而言,我习惯于编写正确的 const 代码:因此,如果我声明一个方法具有非常量引用参数,那么它是非常量这一事实就很重要。如果人们没有编写 const-correct 代码,那么可能很难判断一个参数是否会在子例程中被修改,而另一种机制的参数(例如,指针而不是引用)会更强一些。

关于c++ - 将可修改的参数传递给 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com