在下面的函数的返回中添加 const 限定符有啥重要性?
Posted
技术标签:
【中文标题】在下面的函数的返回中添加 const 限定符有啥重要性?【英文标题】:What is the importance of adding the const qualifier in the return for the function below?在下面的函数的返回中添加 const 限定符有什么重要性? 【发布时间】:2017-07-19 14:35:22 【问题描述】:我有以下代码库
#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
返回类型很重要
【问题讨论】:
请考虑,引用可能有副作用。如果它指的是可以“超出范围”更改的变量,例如在一个不明显的被调用函数中。对于 const 引用也是如此(在这种情况下可能不太期望)。不能“秘密地”更改局部变量(如果不通过引用或指针传递给其他函数)。 我不认为这是完全重复的。在链接的问题中,OP 使用对象类型作为返回类型。在这种情况下,使用int
并且必须考虑其他一些事情。
【参考方案1】:
对于int
,复制成本不高,这是最优选的方式:
int foo(const int &y)
当对如此小的数据类型使用const int&
时,间接寻址会使代码对缓存不太友好,并且可能比复制版本效率低。
【讨论】:
以上是关于在下面的函数的返回中添加 const 限定符有啥重要性?的主要内容,如果未能解决你的问题,请参考以下文章