进入重载<<运算符函数的对象是否必须是常量?

Do objects Coming into the Overloaded << Operator Function have to be Constants?

我有一个程序 class 我正在写我们重载运算符的地方。除了插入运算符,我没有遇到太多麻烦。传递的对象有一个字符数组,其中存储了字符。这些字符是表示数字的 ASCII 值,ACSII 值 1 代表 1。2 代表 2。我现在需要将 char 数组转换回相应的字符(1 = 49、2 = 50 等),方法是向数组中的所有元素添加“0”。我无法更改数组的内容,因为它的对象作为常量传入。我的问题是:

传递给重载插入运算符函数的对象是否必须作为常量传递?

我非常肯定我们的教授希望我们在此函数中转换此数组。我们之前编写了整个程序,但使用了 read() 和 write() 函数而不是重载插入和提取运算符。我们在读写函数中进行了转换,他提到在此赋值中使用与先前赋值相同的代码,但改用重载运算符。我能够在之前的赋值中转换数组中的数字,因为它不是常量。这是代码:

ostream & operator<< (ostream &Out, const MyFloat & x)
{
    int Counter=0;
    int PrintDigits=0;

    //FIGURE OUT HOW TO CONVERT BACK IN THIS FUNCTION

    for (int h=0; h<=MyFloat::MAXDIGIT-1; h++)//converts from number to character
    {
        x.Number[h] += '0';//ISSUE is here, can't change this b/c it's const
    }

    Out << "0.";

    for (int i=x.MAXDIGIT-1; i>=0 && x.Number[i] == '0'; --i)//counting right to left, until we reach the first non-zero number, this is used to print out the correct amount of numbers, to keep from printing trailing 0s
    {
        ++Counter;
    }

    PrintDigits = 19 - Counter;

    for (int j=0; j<=PrintDigits; ++j)
    {
        Out << x.Number[j];
    }

    return Out;
}

我明白了。我没有尝试更改传入的 const 对象,而是将其转换为存储在 ostream 变量 Out 中。

ostream & operator<< (ostream &Out, const MyFloat & x)
{
    int Counter=0;
    int PrintDigits=0;

    Out << "0.";

    if (x.NumberOfDigits != '0')
    {
        for (int i=x.MAXDIGIT-1; i>=0 && x.Number[i] == 0; --i)//counting right to left, until we reach the first non-zero number, this is used to print out the correct amount of numbers, to keep from printing trailing 0s
        {
            ++Counter;
        }

        PrintDigits = 19 - Counter;

        for (int j=0; j<=PrintDigits; ++j)
        {
            Out << (int) x.Number[j];
        }
    }

    else
        Out << "?";

    return Out;
}

正如我所说,这不是我的选择,只是任务要求我做的。