这里有什么概念在起作用,可以在哪里应用
What concept is at work here and where can it be applied?
#include<iostream>
using namespace std;
int &fun()
{
static int x;
return x;
}
int main()
{
fun() = 10;
cout<<fun();
return 0;
}
上述程序输出10.但是我对该程序的实际工作方式感到困惑。
fun()
返回静态变量x
的引用,在main()
的第一个表达式中:
fun() = 10;
^ ^
| x assigned 10
returned x
由于静态变量的值在不同的函数调用之间保持不变,因此在下一个表达式中:
cout << fun();
^
return x with value 10
注意:因为您返回的是静态变量的引用,所以它不是未定义的行为。
函数 fun(( 中有一个静态 int 变量。
该函数返回对该变量的引用。
将 10 分配给变量。
打印变量。
由于该函数返回引用,因此可以修改基础静态变量。
在第一次调用时,将创建 static int
变量,然后返回对它的引用。然后将x
的值设置为 10。
cout
语句再次获取引用,并使用它来将x
写入 stdout。
值得注意的是,如果不static
x
,它将在函数作用域结束时被销毁,返回的引用将是对临时的引用,这是非法的。
最常见的实际应用是operator[]
class ArrayWrapper {
int v [100];
public:
int& operator[] (int index) {
return v[index];
}
};
// usage:
ArrayWrapper aw;
aw[3] = 3;
cout << aw[10];
当然,这是一个示例实现;对于现实世界的重载op[]
查看std::vector
或std::map
。
fun
将返回对静态变量x
的引用,然后可以用来修改x
的值。C 等效项可能是这样的:
int *fun()
{
static int x;
return &x;
}
int main()
{
int *ptr = fun();
*ptr = 10;
printf("%dn", *fun());
return 0;
}
该函数返回对静态变量的引用。函数退出后,静态变量继续存在。
由于该函数返回引用,因此您可以设置该值,然后将其输出到屏幕。它基本上是"隐藏"一个全局变量。我不确定在哪里使用这种技术很有意义,但是......
对 f 中静态变量 x 的引用用于将值 10 分配给 x;然后它(引用(被传递给 cout
静态变量本质上是一个全局变量,只能直接从单个函数访问。 当您的函数返回对此变量的引用时,它实际上返回了它的地址。由于变量是全局的,因此它始终是相同的地址,因此您的函数实际上允许每个人访问此变量。
相关文章:
- C++我需要了解在哪里使用指针和双指针
- 未定义的引用在哪里
- 谷歌测试中的期望值存储在哪里
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- 尽管遵循了规则,内存泄漏在哪里
- 静态数据成员模板专用化的实例化点在哪里
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 在哪里声明结构运算符重载
- C++ 中的自定义异常:在哪里定义它们?
- 常量参数存储在哪里 (C++)?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 在哪里存储跨平台C++应用存储?
- 我在哪里编写在退出 C++ 窗口窗体应用程序之前执行的代码部分
- 编写 Windows 桌面应用程序时,我应该在哪里跟踪我的窗口句柄?
- 可视化 我可以在哪里为多个操作系统中的应用程序启动 c++
- Qt:保存Qt-creator应用程序的SQLite数据库的最佳"Path"在哪里?
- 这里有什么概念在起作用,可以在哪里应用
- 在哪里可以运行应用程序验证程序命令
- c++ Windows窗体应用程序——在哪里实现OnInitDialog()