关于c++中函数返回应用类型--直接返回字符串常量的问题

zzyazzy 2014-07-20 06:57:36
本人c++新手,对以下程序的编译结果表示并不明白,求各位不吝赐教。

const string &func()
{
return "hello";
}

int main()
{
cout<<func()<<endl;
return 0;
}
编译结果:
warning : 返回局部变量或临时变量的地址
本人在对func函数中 return "hello" 的理解是:直接返回对字符串常量hello的引用。
从编译结果看,貌似“hello”还被创建了副本,返回的是对副本的引用?

问题:求教这到底是怎么回事?
...全文
475 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2014-07-21
  • 打赏
  • 举报
回复
const string &func() { static string s("hello"); return s; } 字符串需要转换为 string,此时的 string 是一个临时变量。这个变量不可以被引用返回的。
  • 打赏
  • 举报
回复
引用 2 楼 zzyafyj 的回复:
[quote=引用 1 楼 zjq9931 的回复:] const string &func() { return "hello"; } 这个改成: const char *func() { return "hello"; } 应当就可以了。string &因为要经过强制类型转换。不好。 直接return 返回的是一个字符串常量。没有强制类型转换。
这个改成const char *func()确实是对的。”string &因为要经过强制类型转换“是指?如果我的定义不改变,仍然是const string &func();我应该在函数体内如何进行手动的强制转换? [/quote] 是的,这个楼上给出了方法。
我看你有戏 2014-07-21
  • 打赏
  • 举报
回复


const string func()
{
	return string("hello");
}


int _tmain(int argc, _TCHAR* argv[])
{
	const string& cc = func();
	printf("%s",cc.c_str());
	
	return 0;
}

zzyazzy 2014-07-20
  • 打赏
  • 举报
回复
引用 1 楼 zjq9931 的回复:
const string &func() { return "hello"; } 这个改成: const char *func() { return "hello"; } 应当就可以了。string &因为要经过强制类型转换。不好。 直接return 返回的是一个字符串常量。没有强制类型转换。
这个改成const char *func()确实是对的。”string &因为要经过强制类型转换“是指?如果我的定义不改变,仍然是const string &func();我应该在函数体内如何进行手动的强制转换?
  • 打赏
  • 举报
回复
const string &func() { return "hello"; } 这个改成: const char *func() { return "hello"; } 应当就可以了。string &因为要经过强制类型转换。不好。 直接return 返回的是一个字符串常量。没有强制类型转换。

64,654

社区成员

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

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