在C++中使用别名而不更改原始变量的值

Using alias in C++ without altering value of original variable?

本文关键字:原始 变量 C++ 别名      更新时间:2023-10-16

所以我必须创建一个程序,在其中计算数组中某些元素的总和,然后找到总和的位数(例如,如果几个元素的总和是 175,我必须打印总和的值 (175) 和位数 175 (3))。

为了确定位数,我使用以下"while"循环:

while (sum > 0)
{
    sum /= 10;
    digits++;
}

您可能已经注意到,在循环结束时,总和为 0。所以我想创建一个"sum"的别名:

int& rSum = sum;

所以我简单地在数组中用"rSum"替换了"sum",以便找到位数,并在程序末尾打印总和。无论如何,循环后的"sum"值为0,换句话说等于"rSum"。所以我想,当你为某个变量创建别名时,修改别名,修改变量本身,这在我的情况下是一个问题。

我的问题是,我可以使用别名(或使用引用、指针等)创建程序,还是创建"sum"变量副本(int rSum = sum;)的唯一方法?

您的问题看起来像"如何在不复制此变量的情况下复制此变量?

我认为您的关注根深蒂固,您认为复制会使代码的可读性降低 - 我同意。但是你可以非常简单地对抗它:

int sum = ...;
int digits = countDigits(sum);

countDigits提取到单独的函数中仍将创建sum变量的副本,因为它是按值复制的(这是可以的),但此副本将是临时的(本地到countDigits),并且不会在原始函数中造成不必要的混乱。

Skizz在这里提出了一个基于对数的方法:确定整数位数的有效方法。或者看看布拉德的解决方案。但是,如果您使用除法,则需要一份副本。

这也将创建sum的副本,但至少不会是你:

const int& orgSum = sum + 0;
while (sum > 0)
{
    sum /= 10;
    digits++;
}
cout << orgSum << endl;