请见以下程序:
这段代码在至少一个编译器上可以编译运行,并输出
由于
#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
与fptr
类型不匹配,所以唯一使其工作的方法是使用不安全的强制转换。我猜这取决于省略号-魔法内部的工作原理,因此是否有明确定义?