- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C函数返回引用
舉一個簡單的例子int B(int n){n++;return n;}int main(){int a = 10;int b = B(a); // 調用 B, 傳遞的是 a 的引用// 到了 B 裏, n 就是指 a,// return n; 就相當是 return a;// 返回到 b 的就是 a 的引用, b 就是 a// 對 n 和 b 的操作會直接影響 a, 因爲它們是同一個東西.cout b endl;cout a endl;}----------------------------------對於 int A(int n){return n;}
這裏如果是 int c = A(a); 這樣調用, n 不是 a, 而是一個 a 的副本 (複製值)返回的只是一個值副本, 沒有引用任何東西, 對於原始的 a 沒有任何影響
C++中,返回引用是一个比较晦涩的概念。在书中,对此仅仅做了一个一般的介绍,并没有展开。我觉得有必要对此进行一定的展开。(1)首先,返回引用,要求在函数的参数中,包含有以引用方式或指针方式存在的,需要被返回的参数。比如:int abc(int a, int b, int c, int result){? result = a + b + c;? return result;}这种形式也可改写为:int abc(int a, int b, int c, int *result){? *result = a + b + c;? return *result;}但是,如下的形式是不可以的:int abc(int a, int b, int c){? return?a + b + c;}(2)由于返回值直接指向了一个生命期尚未结束的变量,因此,对于函数返回值(或者称为函数结果)本身的任何操作,都在实际上,是对那个变量的操作,这就是引入const类型的返回的意义。当使用了const关键字后,即意味着函数的返回值不能立即得到修改!如下代码,将无法编译通过,这就是因为返回值立即进行了++操作(相当于对变量z进行了++操作),而这对于该函数而言,是不允许的。如果去掉const,再行编译,则可以获得通过,并且打印形成z = 7的结果。include iostreaminclude cstdlibconst int abc(int a, int b, int c, int result){? result = a + b + c;? return result;}int main() {? int a = 1; int b = 2; int c=3;? int z;? abc(a, b, c)++;? cout z= z endl;? SYSTEM(PAUSE);? return 0;}
看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。
const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书籍建议:“Use const whenever you need”。
1.用const 修饰函数的参数
如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能。const 只能修饰输入参数:
如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地改动该指针,起到保护作用。
例如StringCopy 函数:
void StringCopy(char *strDestination, const char *strSource);
其中strSource 是输入参数,strDestination 是输出参数。给strSource 加上const修饰后,如果函数体内的语句试图改动strSource 的内容,编译器将指出错误。
如果输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加const 修饰。
例如不要将函数void Func1(int x) 写成void Func1(const int x)。同理不要将函数void Func2(A a) 写成void Func2(const A a)。其中A 为用户自定义的数据类型。
对于非内部数据类型的参数而言,象void Func(A a
您可能关注的文档
最近下载
- 电子电路与系统基础II(李国林)X006 12 第六讲习题课 电容电感性质习题课.pdf VIP
- 电动三轮车培训.pptx VIP
- 电子电路与系统基础II(李国林)S012 理论课第12讲 阻抗匹配网络.pdf VIP
- 工程伦理案例分析.docx VIP
- 统编版(2024)七年级历史上册第6课《战国时期的社会变革》课件.pptx VIP
- 电子电路与系统基础II(李国林)S005 09 第五讲理论课 向量法.pdf VIP
- 宜家 吸顶灯 RANARP 勒纳普 吊灯 003.909.52 安装指南.pdf
- 电子电路与系统基础II(李国林)S002 03 第二次理论课 运放应用.pdf VIP
- 工程伦理学习心得体会.docx VIP
- 工程伦理学学习心得.docx VIP
文档评论(0)