gpt4 book ai didi

c++ - 运算符重载 ("<<") :why the “cout” did not work properly?

转载 作者:行者123 更新时间:2023-11-28 00:13:41 24 4
gpt4 key购买 nike

我最近在学习运算符重载。我不知道为什么在参数列表中为 ostream 添加 const 关键字后 cout 没有输出任何内容。这与添加该关键字有关吗?代码如下:

程序 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;
}

输出:无

程序 2:

#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

最佳答案

问题是由const引起的.将您的友元函数声明为非常量:

friend ostream& operator<<(ostream& o, const Foo& f);

和实现:

ostream& operator<<(ostream& o, const Foo& f)
{
o << f.bar;
return o;
}

我不明白为什么这段代码可以编译,因为 operator<<应该总是改变对象。您的代码是未定义的行为,可能会导致段错误。

关于c++ - 运算符重载 ("<<") :why the “cout” did not work properly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31693161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com