关于C++常引用const string&的赋值问题

如下代码出错了:#include<iostream>#include<assert.h>usingnamespacestd;conststring&getString()... 如下代码出错了:

#include <iostream>
#include <assert.h>
using namespace std;

const string& getString();
int main(){
const string& c = "";// (1)
//const string& c = getString();// (2) 改成这行注释也不行
cout<<c<<endl;
assert(c=="");
}
const string& getString(){
return "";
};

//cout后面提示no operator "<<" matches these operands, operand types are:std::ostream<<const std::string
//assert下面也提示no operator "==" matches these operands, operand types are: const std::string == const char[1];
//把(1)改成(2)也不行,同样的提示。各位帮帮忙!!请问是为什么!?如果要使assert能够正常判断该怎么解决???
下面那个const string& getString()函数也必须保留,因为项目源代码里要求是这样一种结构的,就是说能否利用(2)的方法来达到assert的目的?
谢谢@endless2010的提醒,我加了#include <string>,(1)方法没有问题了
但是(2)方法编译上虽然没有问题。但是程序运行还是出现错误了。

调试之后指向了breakpoint
> msvcp110d.dll!std::char_traits<char>::to_int_type(const char & _Ch) Line 588 C++

这个文件是iosfwd。
展开
 我来答
F16_falcon
推荐于2017-12-16 · TA获得超过126个赞
知道答主
回答量:3
采纳率:0%
帮助的人:7.7万
展开全部
getString返回了临时变量的引用…函数调用完,堆栈里的数据就失效了…另外调用函数后这部分数据被覆盖所以引用c指向的内容就无法识别了…
只是要求给const string&赋值的话…函数返回值定义为string就好了…
梦想之帝剑
2020-09-09
知道答主
回答量:22
采纳率:0%
帮助的人:8136
展开全部
我也遇到这样的问题,自己调试及研究了好一会,最后解决了。
1. 指出你上面代码存在的问题(好久了,可能你都不关心了,于是又堆积了一个bug,多了也就无所谓了。哈哈。那就留给后来是到类似问题的人吧。):
const string& getString(){
return ""; //这里有问题,这里是一个局部变量,你用VS调试可以看出的。
};
返回return""; 由于""在此是一个局部变量,栈会释放掉,所以无法传递给const string&;于是cout访问c时,由于c是栈中一个string变量的引用,当函数返回时栈已经被释放,引用关系将受到破坏,就产生你如上的错误。
2. 上面代码需要修改的地方:
const string& getString()
{
return g_var;//string g_var;定义为全局变量;非const可以赋值给const,反之则不行
//这里要是一个全局变量,当然不定这样,这里只提供一种正确的方法,肯定还有别的方法
};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寂默有时
2014-08-06 · 超过10用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:16.4万
展开全部
#include <iostream>
#include <ostream>
#include <string>
#include <assert.h>
using namespace std;

const string& getString();
int main(){
    const string& c = "";// (1)
    //const string& c = getString();//   引用不能赋值
    cout<<c<<endl;
    assert(c=="");        // assert(c==string(""));
}
const string& getString(){
    return "";
};
追问
谢谢回答!请问如何能利用const string& getString()函数进行初始化呢?因为项目源代码的要求是以这种形式赋值的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
野文菜A
2014-08-06 · TA获得超过830个赞
知道小有建树答主
回答量:645
采纳率:100%
帮助的人:517万
展开全部
你没有#include <string>
追问
谢谢提醒,但是程序运行还是存在问题,请看看我的问题补充,谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式