const string& 和const string之间有不同吗?

APOLLOTIMERAW 2008-03-28 07:41:27
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <string>
#include <ctype>

using std::string;

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

string UC(const string& s)
{
s.append("在过程中添加数据");
string r(s);
for (std::size_t i=0;i!=s.size() ;++i) {
r[i]=tolower(s[i]);
}
return r;
}

string NoUC(const string s)
{
s.append("在过程中添加数据");
string r(s);
for (std::size_t i=0;i!=s.size() ;++i) {
r[i]=tolower(s[i]);
}
return r;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::btn1Click(TObject *Sender)
{
string s, ss="aaa ";
s = UC(ss);
Application->MessageBox(s.c_str(), "s", MB_OK);
Application->MessageBox(ss.c_str(), "ss", MB_OK);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn2Click(TObject *Sender)
{
string s, ss="aaa ";
s = NoUC(ss);
Application->MessageBox(s.c_str(), "s", MB_OK);
Application->MessageBox(ss.c_str(), "ss", MB_OK);
}
//---------------------------------------------------------------------------
为什么结果不一样,很多书上都要求加&,说不会改变内里值,但是这里是为什么...

...全文
807 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hastings 2008-03-28
  • 打赏
  • 举报
回复
模板中就有涉及数组的引用.
普通函数也支持.
APOLLOTIMERAW 2008-03-28
  • 打赏
  • 举报
回复
多谢I_Younger所说的,但是要引用是可以改数值,那有一些书所说就不对了.
APOLLOTIMERAW 2008-03-28
  • 打赏
  • 举报
回复
不好意思在人是从DELPHI后改用BCB,DELPHI只有coust var out 和没成员.其实本人以找过很多书,但他们都不能给出很好的答案.
Kratos 2008-03-28
  • 打赏
  • 举报
回复
!><
mark.
kill1227 2008-03-28
  • 打赏
  • 举报
回复
是引用和值传递之间的区别。引用是c++引入的机制,类似指针,可是使用起来用想对象。你要找本书好好看看的!
I_Younger 2008-03-28
  • 打赏
  • 举报
回复
引用形参可以向主调函数返回额外的结果,还可以提高程序的效率,节省大型对象复制的时空开销。
I_Younger 2008-03-28
  • 打赏
  • 举报
回复 1
带&的是常引用,一般为了程序的健壮性,对于string类,如果不需要改变所存储的值,要定义成常引用
ttkk_2007 2008-03-28
  • 打赏
  • 举报
回复
很明显,一个是引用,一个不是
Supper_Jerry 2008-03-28
  • 打赏
  • 举报
回复
在函数参数中使用&,传递的是地址,对形参操作就相当于对实参操作。还避免了传值时候
的拷贝开销。
taodm 2008-03-28
  • 打赏
  • 举报
回复
楼主,你需要一本好点的C++教材,补一下“引用”的基本知识
独孤过儿 2008-03-28
  • 打赏
  • 举报
回复
带&是个常引用,不带的是一个常对象!

64,849

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧