按值、常量值、引用、常量引用、指针、常量指针传递
Passing by value, const value, reference, const reference, pointer, const pointer
探索更多并找到答案以确定如何通过旧帖子(抱歉重复
)- 如果函数打算更改参数作为副作用,请采取它通过非常量引用。
- 如果函数不修改其参数,并且参数是基元类型,请按值获取。 否则,请
- 通过常量引用来获取,但以下情况除外
- 如果函数随后需要复制 const 引用无论如何,按价值计算。
[原文如下]
我想总结一下按值传递、常量值、引用、常量引用、指针、常量指针的使用,请纠正我并给我您的建议。
- 至于参考和指针,如果可能的话,请使用 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
总是一个好主意。它有助于代码的可读性,让其他人知道他们传递给方法的值会发生什么情况,并帮助编译器捕获在修改方法中的值时可能犯的任何错误。
通过引用传递和指针传递之间没有性能差异。
如果有的话,可以忽略不计。编译器将在此处处理详细信息。它为您节省了创建指针的工作量,并且可以很好地为您取消引用它。
当大小不大于单词时,按值传递。
正如 Mark 指出的那样,如果值小于指针,则执行此操作。指针在 32 位和 64 位系统上是不同的大小(因此得名),因此这实际上由您自行决定。我喜欢传递指针,除了原始类型(char
,int8_t
,int16_t
,float
等),但这只是我的意见。
相关文章:
- 将常量指针引用绑定到非常量指针
- 如何使用数据对象上的常量指针初始化类
- 为什么我收到"从常量指针到指针的转换无效?
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- 为什么C++中没有常量引用,就像常量指针一样?
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 将常量指针强制转换为非常量
- 带有常量指针的矢量构造函数示例
- 什么是常量指针常量引用类型的参数?(const X* const & p)
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 常量指针上的混乱
- 使用 static_cast 时指向常量指针的原因
- 如何在C++中定义常量指针数组?
- 测试此指针的常量指针性质
- 当常量指针用作函数的参数时
- C++ - 无法将顶部常量指针分配给另一个非常量指针
- 在不同类型之间转换常量指针
- 解构常量指针?
- 为什么 std::vector<>::const_reference 可以转换为非常量指针?