在C++中使用别名而不更改原始变量的值
Using alias in C++ without altering value of original variable?
所以我必须创建一个程序,在其中计算数组中某些元素的总和,然后找到总和的位数(例如,如果几个元素的总和是 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;
相关文章:
- std::move 如何使原始变量的值无效?
- 如果包含引用成员的类中缺少原始变量,为什么它仍然可以访问?
- 如何从字符串变量为正则表达式构建原始字符串
- 是否可以保证浮点变量的副本将按位等效于原始副本?
- 为什么存储在变量中的值比原始答案少 1?
- 在C++中使用多线程时,是否可以读取半写的、损坏的原始变量?
- 如何将变量用作原始 JSON 字符串中的数据?
- #defined 函数只能接受原始输入而不接受变量?
- C++ 如何更改函数中原始变量的值
- 使用 const_cast<> 并更改地址处的值不会更改原始变量
- 重载运算符保持变量更新,而不是保持原始变量
- 在C++中使用别名而不更改原始变量的值
- 如何修改通过值传递的原始变量的内容
- 如果使用引用的目的是更改原始变量的值,为什么要使用 const 引用传递?[C++]
- [C++传递值]:被调用函数是否可以修改原始变量的内容
- 是c++中被垃圾收集的原始变量
- 在 cpp 中,我是否必须始终"free"原始变量?
- 初始化另一个变量或反复使用原始变量
- 尝试反映对原始变量的更改(通过引用调用)的效果
- 哪些情况会导致对c++代码进行原始变量的简单搜索失败?