gpt4 book ai didi

c++ - 重载输出运算符和后增量运算符时不匹配 ‘operator<<’ 错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:33:11 24 4
gpt4 key购买 nike

当我尝试编译以下代码时,编译器会生成一长段错误消息,内容类似“'std::cout << a.A::operator++(0)' 中的'operator<<' 不匹配” “……”候选人是……。

但是如果我将 operator<< 的第二个参数的类型更改为“const A&”或简单的“A”,它会神奇地编译。

为什么这个改变有效?当 << 重载时,c++ 标准是否强制第二个参数的类型为 const T& 或 T?还是有其他原因?

#include <iostream>
using namespace std;

class A
{
public:
A operator++(int) { return A(); }
};

ostream& operator<<(ostream& os, A& a)
{
return os;
}

int main()
{
A a;
cout << a++;
return 0;
}

最佳答案

您缺少的是 operator++ 返回一个临时值。它必须增加值但仍返回原始值,因此它所做的是保存原始值的拷贝,然后增加它,然后返回原始值拷贝。

此拷贝作为未命名的临时对象返回,语言声明此类值不能绑定(bind)到非常量引用(作为您的参数)。无论如何,您都不想将输出函数作为非常量引用传递给输出函数,因为如果您在输出期间改变了值,您的用户会非常失望。

关于c++ - 重载输出运算符和后增量运算符时不匹配 ‘operator<<’ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29351025/

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