关于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。 展开
#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。 展开
4个回答
展开全部
我也遇到这样的问题,自己调试及研究了好一会,最后解决了。
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,反之则不行
//这里要是一个全局变量,当然不定这样,这里只提供一种正确的方法,肯定还有别的方法
};
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,反之则不行
//这里要是一个全局变量,当然不定这样,这里只提供一种正确的方法,肯定还有别的方法
};
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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()函数进行初始化呢?因为项目源代码的要求是以这种形式赋值的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你没有#include <string>
追问
谢谢提醒,但是程序运行还是存在问题,请看看我的问题补充,谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询