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

时间:2014-11-15 15:08:52

标签: c++ pointers reference alias

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

要确定我使用以下“while”循环的位数:

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

正如您可能已经注意到的那样,在循环结束时,总和为0.所以我想创建一个“sum”的别名:

int& rSum = sum;

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

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

3 个答案:

答案 0 :(得分:3)

您的问题看起来像#34;如何在不制作此变量的副本的情况下复制此变量?"。

我认为你的关注度低一级,你认为制作副本会使代码的可读性降低 - 我同意。但你可以非常简单地打击它:

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

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

答案 1 :(得分:0)

Skizz在这里提出了一种基于对数的方法: Efficient way to determine number of digits in an integer。 或者看看布拉德的解决方案。 但是,如果您使用分部,则需要一份副本。

答案 2 :(得分:0)

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

const int& orgSum = sum + 0;

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

cout << orgSum << endl;