我最近在学习运算符重载。在参数列表中为cout
添加const
关键字后,我不知道为什么ostream
没有输出任何内容。这是否与添加该关键字有关?代码如下:
计划1:
#include<iostream>
#include<string>
using namespace std;
class Foo
{
private:
string bar;
public:
Foo(string str);
friend const ostream& operator<<(const ostream& o, const Foo& f);
};
Foo::Foo(string str)
{
this->bar = str;
}
const ostream& operator<<(const ostream& o, const Foo& f)
{
o << f.bar;
return o;
}
int main()
{
Foo f("HelloWorld");
cout << f;
}
输出:无
Program2 :
#include<iostream>
#include<string>
using namespace std;
class Foo
{
private:
string bar;
public:
Foo(string str);
friend ostream& operator<<(ostream& o, const Foo& f);
};
Foo::Foo(string str)
{
this->bar = str;
}
ostream& operator<<(ostream& o, const Foo& f)
{
o << f.bar;
return o;
}
int main()
{
Foo f("HelloWorld");
cout << f;
}
输出:的HelloWorld
答案 0 :(得分:3)
问题是由const
引起的。将您的朋友函数声明为非const:
friend ostream& operator<<(ostream& o, const Foo& f);
并实施:
ostream& operator<<(ostream& o, const Foo& f)
{
o << f.bar;
return o;
}
我无法理解为什么这段代码会被编译,因为operator<<
应该始终更改对象。您的代码是未定义的行为,可能会导致细分错误。