gpt4 book ai didi

c++ - 运算符重载 C++ - 重载输出 "<<"运算符

转载 作者:太空狗 更新时间:2023-10-29 20:06:19 24 4
gpt4 key购买 nike

我刚刚开始学习基本的 C++ 语法,我对遇到的一段代码感到有些困惑。

对于创建的名为 MyString 的类,有一个运算符重载定义为:

ostream& operator<<(ostream& os, const MyString& s)
{
os << s.data;
return os;
}

然后在一些驱动函数中声明:

cout << s3 << endl;

运行,其中 s3 是对象类型 MyString。结果打印出s3的值。

我不太明白这个语句是如何运作的。在弄乱它之后,似乎调用了一次复制构造函数,然后解构了 3 个对象。这条线究竟是如何工作的?运算符(operator)似乎接受了对 ostream 和 MyString 的引用,但也不是 endl 吗?另外,当使用了两个“<<”实例时,为什么只调用 1 个复制构造函数?也许我什至没有问正确的问题,或者我的问题甚至没有意义,因为我对这些行中发生的事情感到非常困惑。如果是这样的话,有人可以对发生的事情进行一般性解释吗?

最佳答案

这是一个非常笼统的问题,但我会尽力消除您的误解。

当你说 ostream& operator<<(ostream& os, const MyString& s) { ... } ,你只是定义了一个接受 ostream& 的函数作为第一个参数和 const Mystring&作为第二个参数,并返回一个 ostream& .该函数恰好被命名为 operator<<可以通过简写语法调用 x << y调用operator<<(x, y) .

当你做 cout << s3 << endl; , 这与做 operator<<(operator<<(cout, s3), endl); 是一样的.

MyString 的复制构造函数和析构函数都不是正在从此代码中调用。您看到的消息来自其他地方。

关于c++ - 运算符重载 C++ - 重载输出 "<<"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8391810/

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