在下面的函数的返回中添加 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 &amp; 返回类型而不是 int 返回类型很重要

【问题讨论】:

请考虑,引用可能有副作用。如果它指的是可以“超出范围”更改的变量,例如在一个不明显的被调用函数中。对于 const 引用也是如此(在这种情况下可能不太期望)。不能“秘密地”更改局部变量(如果不通过引用或指针传递给其他函数)。 我不认为这是完全重复的。在链接的问题中,OP 使用对象类型作为返回类型。在这种情况下,使用int 并且必须考虑其他一些事情。 【参考方案1】:

对于int,复制成本不高,这是最优选的方式:

int foo(const int &y)

当对如此小的数据类型使用const int&amp; 时,间接寻址会使代码对缓存不太友好,并且可能比复制版本效率低。

【讨论】:

以上是关于在下面的函数的返回中添加 const 限定符有啥重要性?的主要内容,如果未能解决你的问题,请参考以下文章

自动检测是否需要在函数参数中添加“const”限定符

在原始类型c ++中返回const或非常量有啥区别[重复]

C语言函数返回值为 const 型 有啥意义

C++中const啥意思?

c++中Std有啥用

POWERPOINT中,在幻灯片的占位符中添加的文本有啥要求