传递值,const值,引用,const引用,指针,const指针

时间:2013-01-30 22:55:13

标签: c++ parameter-passing

详细了解并找到答案以确定如何传递old post(抱歉重复)

  • 如果函数打算将参数更改为副作用,请执行 它由非const引用。
  • 如果该功能没有修改它 参数和参数是原始类型,按值进行。
  • 除非在下列情况下,否则请使用const引用
    • 如果函数需要复制const引用 无论如何,按价值来看。

[原帖在下方]

我想总结使用传递值,const值,引用,const引用,指针,const指针,请指正,并给我你的建议。

  • 至于参考和指针,尽可能使用const(感谢所有)。
  • 传递引用和指针之间没有性能差异。
  • 当尺寸不大于指针时(感谢Mark Ransom),按值传递。

还有一些问题:

  1. 我很少看到传递const值。它有用还是编译器会在传递值时检测到常量?
  2. const引用占用太多空间。我可以使用值传递吗?现代编译器是否会优化它以免牺牲性能?
  3. 根据juanchopanza提到的文章"Want Speed? Pass by Value",我再添加一项。

    • 如果要复制参数,请按值传递它们,让编译器进行复制,而不是通过const引用传递它们,并在函数体中自行复制。

    非常感谢!

1 个答案:

答案 0 :(得分:4)

  

我很少看到传递const值。它是有用的还是编译器会在传递值时检测到常量?

传递const值并不存在。当您通过值传递时,您无法修改该值,使得更改将在子例程之外可见。这是因为当您通过值传递时,会复制原始值并在该函数中使用该副本。

  

const引用占用太多空间。我可以使用路过吗?   值?现代编译器是否会优化它以免牺牲   性能

传递(const)引用与传递值不同。当您通过引用传递该值时,不会复制该值,只需提供一个存储位置,因此您可以修改' (间接)通过引用传递的值。

例如,以下内容:

void byValue(int x) {
    x += 1
}
void byRef(int &x) {
    x += 1
}

// ...
{
    y = 10;
    byValue(y);
    cout << y << endl // Prints 10
    byRef(y);
    cout << y << endl; // Prints 11
}
// ...
  

尽可能使用const。

在必要时传递const总是一个好主意。它有助于代码可读性,让其他人知道它们传递给方法的值会发生什么,并帮助编译器捕获您在修改方法内部值时可能犯的任何错误。

  

传递引用和指针之间没有性能差异。

如果有的话可以忽略不计。编译器将在此处理详细信息。它可以节省您创建指针的工作量,并且可以很好地为您解除引用。

  

当大小不大于单词时,按值传递。

正如Mark指出的那样,如果值小于指针,则执行此操作。指针在32位和64位系统上有不同的尺寸(因此得名),所以这完全由您自行决定。除了基本类型(charint8_tint16_tfloat等)之外,我很喜欢传递几乎所有内容的指针,但这只是我的意见