考虑以下程序:
#include <iostream>
typedef void (*fptr)(...);
void foo(fptr func) {
(*func)(12);
}
void bar(int x) {
std::cout << "bar : " << x << std::endl;
}
int main() {
foo(fptr(bar));
}
这compiles, runs and prints bar : 12
在至少一个编译器上 :) 我在一些我应该维护的遗留代码中发现了这一点,我想知道这是否安全/已定义?
bar
与类型 fptr
不匹配,所以让它工作的唯一方法是使用不安全的转换。我想这取决于省略号-魔法 在内部的工作方式,那么它是以某种方式定义的吗?
最佳答案
代码所做的是未定义的行为。如果它的工作只是偶然,则无法保证它应该工作。使用强制转换的函数指针可以安全地完成的唯一事情是将其强制转换回其原始类型。
关于c++ - 使用省略号转换指向函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7808290/