自定义类内对std::string的引用问题

xiaolomg 2012-09-11 09:10:02
我自己定义了一个Test类:

#include<iostream>
#include <string>

using namespace std;

class Test
{
public:
Test(){}
Test(string &aStr):m_Str(aStr){}
const char& operator[](size_t aPos)const
{
return m_Str[aPos];
}
char& operator[](size_t aPos)
{
return m_Str[aPos];
}
private:
string m_Str;
};

int main()
{
Test t("test");//这里会出现error,const char*不能转化为string&
cout << t[0] << endl;
const Test lTest("Halen");
cout << lTest[1] << endl;
}

等我修改为
#include<iostream>
#include <string>

using namespace std;

class Test
{
public:
Test(){}
Test(string aStr):m_Str(aStr){}
const char& operator[](size_t aPos)const
{
return m_Str[aPos];
}
char& operator[](size_t aPos)
{
return m_Str[aPos];
}
private:
string m_Str;
};

int main()
{
Test t(string("test"));
cout << t[0] << endl;
const Test lTest("Halen");
cout << lTest[1] << endl;
}

就行了,这是为什么呢?求解答
...全文
111 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolomg 2012-10-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

楼主这个基础真是稍微差了,竟然不知道非const的引用不能加在临时对象上。
[/Quote]
哦,我承认自己基础差,之前没注意到这种情况,还是谢谢啦!散分!
allen_0210 2012-09-11
  • 打赏
  • 举报
回复
嗯,ls对啊,呵呵我的基础也不好 :)
taodm 2012-09-11
  • 打赏
  • 举报
回复
楼主这个基础真是稍微差了,竟然不知道非const的引用不能加在临时对象上。
allen_0210 2012-09-11
  • 打赏
  • 举报
回复
我理解是传引用的问题,const char* 到string肯定是可以的,但因为string::string(const char*)是string的构造函数,而不是string &的构造函数
xiaolomg 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

显然不能支持隐式类型转换
[/Quote]
为毛不支持,我木有explict啊
allen_0210 2012-09-11
  • 打赏
  • 举报
回复
显然不能支持隐式类型转换

64,670

社区成员

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

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