在C ++中通过引用传递指针会带来什么好处?

将指针传递给C ++传递参考的好处是什么?

最近,我看到许多例子都是通过指针来选择传递函数参数,而不是通过引用传递。 这样做有好处吗?

例:

func(SPRITE *x);

打电话给

func(&mySprite);

func(SPRITE &x);

打电话给

func(mySprite);

一个指针可以接收一个NULL参数,一个参考参数不能。 如果有可能想要传递“无对象”,则使用指针而不是引用。

另外,通过指针传递允许您在调用站点显式查看该对象是按值还是按引用传递的:

// Is mySprite passed by value or by reference?  You can't tell 
// without looking at the definition of func()
func(mySprite);

// func2 passes "by pointer" - no need to look up function definition
func2(&mySprite);

通过指针传递

  • 呼叫者必须采取地址 - >不透明
  • 可以提供0值来表示nothing 。 这可以用来提供可选参数。
  • 通过参考传递

  • 调用者只是传递对象 - >透明。 必须用于操作符重载,因为指针类型的重载是不可能的(指针是内置类型)。 所以你不能做string s = &str1 + &str2; 使用指针。
  • 没有可能的值 - >被调用的函数不必检查它们
  • const引用也接受临时对象: void f(const T& t); ... f(T(a, b, c)); void f(const T& t); ... f(T(a, b, c)); ,指针不能像这样使用,因为你无法获取临时地址。
  • 最后但并非最不重要的是,引用更容易使用 - >错误的机会更少。

  • 艾伦霍勒布的“足够的绳索自我在脚下”列出了以下2条规则:

    120. Reference arguments should always be `const`
    121. Never use references as outputs, use pointers
    

    他列举了为什么将引用添加到C ++的几个原因:

  • 他们有必要定义拷贝构造函数
  • 它们是操作员过载所必需的
  • const引用允许您在避免副本的同时拥有按值传递的语义
  • 他的主要观点是不应将参考用作'输出'参数,因为在呼叫现场不存在关于参数是参考还是参数值的指示。 所以他的规则是只使用const引用作为参数。

    就个人而言,我认为这是一个很好的经验法则,因为当参数是一个输出参数时,它更清晰。 但是,尽管我个人对此一致认同,但如果他们争论输出参数作为参考(某些开发人员非常喜欢),我确实会让我自己受到团队中其他人的意见的影响。

    链接地址: http://www.djcxy.com/p/459.html

    上一篇: Are there benefits of passing by pointer over passing by reference in C++?

    下一篇: Pass by reference or pass by value?