C++引用和引用参数
C++ references and references parameters
请查看下面的代码片段 - 我已经声明了 3 个函数(即 1 个传递 int,其他函数传递对 int 的引用)。执行程序后,我发现调用函数(tripleByReference)后"count"变量的值没有改变以反映其三元组(count仍然等于5)。但是,调用函数(tripleByReferenceVoid)会修改变量,但这是由于变量(计数)直接发生了更改。
我知道通过引用传递,调用方使被调用函数能够直接访问调用者的数据并对其进行修改,但这无法通过将变量传递给函数(tripleByReference)来实现 - 请帮助我理解这一点。
#include <iostream>
using namespace std;
/* function Prototypes */
int tripleByValue(int);
int tripleByReference(int &);
void tripleByReferenceVoid(int &);
int main(void)
{
int count = 5;
//call by value
cout << "Value of count before passing by value is: " << count << endl;
cout << "Passing " << count << " by value, output is: "
<< tripleByValue(count) << endl;
cout << "Value of count after passing by value is: " << count << endl;
//call by reference - using int tripleByReference
cout << "nnValue of count before passing by reference is: " << count << endl;
cout << "Passing " << count << " by reference, output is: "
<< tripleByReference(count) << endl;
cout << "Value of count after passing by reference is: " << count << endl;
//call by reference - using void tripleByReference
tripleByReferenceVoid(count);
cout << "nnValue of count after passing by reference is: " << count << endl;
cout << endl;
system("PAUSE");
return 0;
}//end main
int tripleByValue (int count) {
int result = count * count * count;
return result;
}//end tirpleByValue function
int tripleByReference(int &count) {
int result = count * count * count;
return result; //perform calcs
}//end tripleByReference function
void tripleByReferenceVoid(int &count) {
count *= count * count;
}//end tripleByReference function
谢谢。
tripleByReference
不会更改count
的值,因为您永远不会分配给它。而是返回值。
tripleByReferenceVoid
是不同的。您正在分配给它(count *= ...
),这就是反映这些更改的原因。
在你的函数tripleByReference
中,你甚至没有尝试修改count
的值,而在函数tripleByReferenceVoid
中,你显式修改count
。因此,显而易见的预期效果:后一个函数修改count
,前者不修改。也就是说,这些函数完全按照你明确和有意识地要求它们做的事情。
像这样的问题很难回答,因为几乎不可能理解是什么让你问它。您似乎对这两个函数的行为不同这一事实感到困惑。但是,当您自己明确地将它们写成在特定方面有所不同时,为什么会让您感到困惑?
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 具有常量引用参数的函数模板专用化
- C++:常量引用参数
- 字符串引用参数的效率C++
- 通过非常量引用参数修改常量引用参数
- 如何将指针变量作为引用参数传递?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 移动类的成员作为常量引用参数传递
- C++带有适用于左值和右值的引用参数的函数
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 如何使用类型特征将函数的通用引用参数限制为 r 值引用?
- 委托构造函数和引用参数
- 对 const 引用参数使用默认值会导致崩溃
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 如何强制函数仅接受左值引用参数
- 模板引用参数推断失败C++
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 将unique_ptr作为引用参数或常量传递unique_ptr引用