从函数到函数指针的隐式强制转换
Implicit cast from function to function pointer?
我有一个函数,它接受函数指针作为参数。令人惊讶的是,我可以同时传入函数指针和普通函数:
#include <iostream>
#include <functional>
int triple(int a) {
return 3*a;
}
int apply(int (*f)(int), int n) {
return f(n);
}
int main() {
std::cout << apply(triple, 7) << "n";
std::cout << apply(&triple, 7) << "n";
}
我对为什么会这样感到困惑。是否存在从函数到函数指针的隐式转换?
是的,有函数到指针的隐式转换:
函数类型 T 的左值可以隐式转换为指向该函数的 prvalue 指针。这不适用于非静态成员函数,因为引用非静态成员函数的 lvalue 不存在。
和
指向函数的指针可以使用非成员函数或静态成员函数的地址进行初始化。由于函数到指针的隐式转换,地址运算符是可选的:
void f(int); void (*p1)(int) = &f; void (*p2)(int) = f; // same as &f
这意味着当在需要函数指针的上下文中使用时,函数(非静态成员函数除外)将隐式转换为函数指针,并且operator&
的使用是可选的。
相关文章:
- 如何使用Rcpp将R函数转换为C++函数
- C++函数转换为 C# 函数
- 将 C 函数转换为 C++ 以检查数字是否有效
- C++:从重载函数转换为 std::function
- 将 C 函数转换为C++语言
- C++隐式构造函数转换,后跟类型向上转换
- 将 lambda 函数转换为具有混合 lambda 引入器和参数列表的函子结构
- 通过 Boost Python 将 Python 函数转换为 C++,用作回调
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- 如何将函数转换为 lambda 函数
- 自定义函数转换错误?
- 将 C# 哈希函数转换为C++
- 将 lambda 函数转换为另一个编译单元中的普通函数会缩短编译时间吗?
- 加快 R 性能或将 R 函数转换为C++函数
- 将成员函数转换为指向成员函数的指针
- 将MATLAB炒作函数转换为C
- Rcpp - 用二进制函数转换数字向量?
- C lambda函数转换误差
- 此语法中的构造函数转换错误
- 将函数转换为find_if lambda