【发布时间】:2014-05-29 10:20:27
【问题描述】:
如果我的代码如下所示:
void foofunc(const int fooarg)
{
// something here
}
fooarg 是通过值传递还是通过引用传递?因为fooarg是const,所以不会被修改,所以引用传递就可以了。
如果我有如下代码:
void foofunc(int fooarg)
{
// something here, but fooarg is not gonna get modified
}
fooarg 是通过值传递还是通过引用传递,它是否是 const ?情况与上述相同。它不会被修改。
【问题讨论】:
-
签名没有指定参数是通过引用 (&) 或指针 (*) 传递的,因此它们是按值传递的。为什么这样问?您遇到问题了吗?
-
当对象通过引用传递时......它们是通过引用传递的。这里没有什么令人困惑的地方,你的论点是按值传递的。
-
@PanagiotisKanavos 我想也许编译器优化了代码:)
-
@PanagiotisKanavos 例如,当我有这样的函数:
void foofunc(std:vector<int> v);并且如果我传递非常大的vector,那么效率会降低:) -
不是优化问题。很多时候,您确实想要处理数据的副本——并行处理至少是一种情况。您应该酌情使用引用或复制语义。
标签: c++ constants pass-by-reference pass-by-value