c++ - void f() 和 void(*f)() 有什么区别?在处理函数指针时,所有可能的语法是什么?
问题描述
void F(void f(), void(*v)())
{
}
据我了解,这两个参数具有相同的类型,都是指向不带任何内容并返回的函数的指针void
。这两种写法是什么?如果它们都是完全相同的东西,那么为什么void f()
不受欢迎void(*f)()
呢?第一个似乎更容易,因为它看起来像普通函数的编写方式。还有在处理函数指针时可以使用的所有可能的语法是什么?或者在哪里可以找到它们?以下是我能够得到的一些:
#include <iostream>
#include <vector>
void func1()
{
std::cout << "func1\n";
}
void (*returnFunc1())()
{
return func1;
}
auto returnFunc1_2() -> void(*)()
{
return func1;
}
void func2(int x)
{
std::cout << "func2 " << x << "\n";
}
auto returnFunc2() -> void(*)(int)
{
return func2;
}
int func3(int, bool)
{
std::cout << "func3\n";
return 0;
}
int (*returnFunc3(long long))(int, bool)
{
return func3;
}
void func4(void f(), void(*v)())
{
std::cout << "func4\n";
}
void (*returnFunc4())(void(), void(*)())
{
return func4;
}
int main()
{
void (*funcPointer)() = func1;
funcPointer();
std::vector<void(*)()> v;
v.push_back(func1);
v.back()();
returnFunc2()(123);
returnFunc3(123)(456, true);
returnFunc4()(func1, func1);
}
有没有其他可以使用的语法?我只是好奇。
例如, 的含义是int (*(*foo)(void ))[3]
什么?如何阅读这样的声明?或者我在哪里可以了解如何阅读这些神秘的陈述?
解决方案
推荐阅读
- python - 我正在尝试使用 python 从 postgressql 中的列中提取一个值。但我总是得到这个错误:
- typescript - 角度反应控制值未正确更新
- c++ - std::vector 中的 C++ 外部类(定义格式错误)
- react-native - 关于 react-native 应用程序中 pptx 文件的问题
- python - 将数据从 Django 发送到另一台服务器
- xml - XSD 验证错误。“发现问题始于:属性”
- python - PyQt5 过滤数据框
- mysql - MySQL的动态字段总和
- javascript - 如何选择一整列
- python - 如何使用 python 绳索重构模块?