详细了解并找到答案以确定如何传递old post(抱歉重复)
[原帖在下方]
我想总结使用传递值,const值,引用,const引用,指针,const指针,请指正,并给我你的建议。
还有一些问题:
根据juanchopanza提到的文章"Want Speed? Pass by Value",我再添加一项。
非常感谢!
答案 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位系统上有不同的尺寸(因此得名),所以这完全由您自行决定。除了基本类型(char
,int8_t
,int16_t
,float
等)之外,我很喜欢传递几乎所有内容的指针,但这只是我的意见