考虑以下程序:
#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));
}
这可以在至少一个编译器上编译、运行和打印bar : 12
:) 我在一些我应该维护的遗留代码中发现了这一点,我想知道这是否安全/已定义?
bar
与 type 不匹配fptr
,因此使其工作的唯一方法是使用不安全的强制转换。我想这取决于省略号魔法在内部是如何工作的,那么它是以某种方式定义的吗?