返回值 int&
Return value int&
我有这样的代码。
#include <iostream>
using namespace std;
int c=0;
int& abc()
{
c++;
return c;
}
int main()
{
cout << c << endl;
int f = abc();
cout << c << " " << f << endl;
f++;
cout << c << " " << f << endl;
}
我得到的输出是
0
1 1
1 2
现在函数abc返回一个整数引用。因此,语句int f=abc();
应该将整数f和c指向同一地址。但是为什么f++语句不影响c的值呢?
int &f = abc();
因为您的f
不是参考。它只是一个被赋值为c
的变量。你应该像上面一样写它。
这是因为当abc()
通过引用返回int时,f
并没有"抓取"这个引用,而是抓取返回的引用指向的值。如果你想让f
抓取引用,你需要将其定义为引用类型。
这样做:
#include <iostream>
using namespace std;
int c=0;
int& abc()
{
c++;
return c;
}
int main()
{
cout << c << endl;
int &f = abc();
cout << c << " " << f << endl;
f++;
cout << c << " " << f << endl;
}
int f = abc();
^^^ // This type is 'int' not 'int&'
您为f
键入的是int
,这与int&
不同,并导致创建副本。因此,f
不是对c
的引用,而是一个单独且不同的值,当它从abc
返回时,它被初始化为与存储在c
中的值相同的值。
Yes abc()
返回一个引用。但f
只是一个整数变量。因此,int f=abc()
所做的是将c
的值分配给f
。当您调用f++时,它只更改f
变量的值。它不会改变c
的值。因为CCD_ 21不是指针。
在以下代码中:int f = abc()
f是c值的副本,这两个值是不同的。当您执行++f时,您正在递增副本f没有影响。当您执行以下操作时:int &f = abc()
您正在创建一个引用变量f,该变量绑定到c的值,因此,由于f是变量c进行。
相关文章:
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- 如何使用 SWIG 将 C++ int** 返回值给 Python
- 返回类型为 int 的函数中的默认返回值 1?
- 为什么int上的返回值相同
- std::sort in vector<int> 返回 0 而不是值
- 绑定的返回值不是int
- int main() 的返回值是什么意思,如何显示它?
- C++int函数.当零是有效的返回值时,我如何检测false
- 警告:忽略"int scanf(const char*, ...)"的返回值,使用属性 warn_unused_result [-Wunused-result] 声明
- 在 C++ 中传递 int 变量 - 错误检查不返回值
- 为什么这个返回值?C++int/char混淆
- <int>在C++中引用 stack.top() 的返回值的正确行为是什么
- 我可以从引用传递的参数返回值中声明const int吗
- 如果一个指定返回类型为int的函数没有任何返回语句,即不返回值,它会返回垃圾值吗
- 返回 int 但不显式返回任何内容的函数的返回值是什么。例如输出
- 不能将int赋值给返回类的int成员
- 返回值 int& 和 const int& 之间的区别
- 返回值 int&