免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: ctsweeper
打印 上一主题 下一主题

[C++] 不理解为什么会有const类型的返回值,它有什么作用呢? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2012-07-19 19:43 |只看该作者
abortexit 发表于 2012-07-19 17:10
左值和右值属于编译器的概念。简单的说,每一个变量都有两个属性,一个就是左值,一个就是右值了。

右值 ...
一个最广泛的例子就是连续赋值。比如 a + b = c;
连续赋值应该是
a = b = c;

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
12 [报告]
发表于 2012-07-19 20:04 |只看该作者
ctsweeper 发表于 2012-07-18 18:50
我的疑问是:什么情况下函数的返回值又被当做左值的需求呢?
从The C++ Programming Language 3rd Edition上面借来的一个例子。
返回值为坐值的需求的时候。
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;

  4. struct word {
  5.     string name;
  6.         int count;
  7. };

  8. vector<word> vWords;

  9. int& value(const string& s)
  10. {
  11.          for (int i = 0; i < vWords.size(); i++)
  12.                   if (s == vWords[i].name)
  13.                           return vWords[i].count;
  14.      word p = { s, 0 };
  15.      vWords.push_back(p);
  16.      return vWords[vWords.size()-1].count;
  17. }

  18. int main(void)
  19. {
  20.         string buf;
  21.         while (cin >> buf)
  22.                   value(buf)++;
  23.     for (vector<word>::const_iterator p = vWords.begin();
  24.                        p != vWords.end(); p++)
  25.          cout << p->name << ": " << p->count << '\n';
  26. }
复制代码

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
13 [报告]
发表于 2012-07-19 22:25 |只看该作者
L_kernel 发表于 2012-07-19 19:41
这是一种错误的用法。const char[]不能写的。

编译器能发现吗?!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2012-07-19 23:09 |只看该作者
r2007 发表于 2012-07-19 22:25
编译器能发现吗?!
这个要看用的是什么编译器。mingw32当中,会有警告信息。 加入参数-Wno-write-strings可以关闭这个警告信息。

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
15 [报告]
发表于 2012-07-19 23:25 |只看该作者
L_kernel 发表于 2012-07-19 23:09
这个要看用的是什么编译器。mingw32当中,会有警告信息。 加入参数-Wno-write-strings可以关闭这个警告信息 ...

回答的挺谨慎的,这就是const返回值的好处,编译器会给出错而不是警告了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP