【发布时间】:2025-12-23 00:45:17
【问题描述】:
所以我正在浏览一些笔记,但我被一些奇怪的声明弄糊涂了。 在下面的代码段中,您可以看到下面的代码块有一个分配给自动变量的函数
#include<iostream>
using namespace std;
void Hi(int a)
{
cout << "Hi" << a << endl;
}
int main()
{
auto Print = Hi;
Print(5);
}
但是函数(这里的'Hi')没有括号()并且它仍然有效..那么它是如何工作的? 更让我心动的是它的类型是什么?最后,当我们调用该变量时,它会打印“Hi5”。
我对这部分很好奇,因为这只是我们代码的一个示例部分。 我们需要制作一个 for-each 循环函数的工作示例,以使用这种类型在向量中显示值。
我似乎找不到任何线索,因为我什至不知道类型..但是我们的教授确实提到要更好地使用“lambdas”,我在网上查了一下,但我不清楚这是什么。任何提醒都会非常有帮助。
【问题讨论】:
-
“我什至不知道类型” - 如果您使用适当的调试器或像 Visual Studio 这样的 IDE,您只需将鼠标悬停在变量名称上即可查看其类型。它看起来像一个函数指针。
-
请教你的教授。
-
但是函数(这里的'Hi')没有括号(),它仍然有效 -- 没有括号,它是一个函数指针。这与 lambdas 无关。
-
帮自己一个忙,写成
auto Print = &Hi;和(*Print)(5);仅仅因为函数名可以隐式衰减为指针并不意味着你应该这样做。