我有以下代码库
#include <cstdio>
int foo(const int &y) {
static int z = y;
z = z + 1;
return z;
}
int main(int argv, char *args[]) {
int x = 6;
int r = foo(x);
printf("The value returned is %d\n", r);
printf("The vlaue of x is %d\n", x);
r = foo(x);
printf("The value returned is %d\n", r);
printf("The vlaue of x is %d\n", x);
}
现在,上面的代码打印相同的输出
The value returned is 7
The value of x is 6
The value returned is 8
The value of x is 6
无论函数是否定义如下:
int foo(const int &y) {
或者像这样:
const int & foo(const int &y) {
所以我的问题是副作用是什么或为什么使用/不使用const int &
返回类型而不是int
返回类型
答案 0 :(得分:1)
对于int
,副本很便宜,这是最受欢迎的方式:
int foo(const int &y)
当对这样小的数据类型使用const int&
时,间接将使代码对缓存不太友好,并且可能效率低于复制版本。