c++ - 使用省略号转换指向函数的指针

标签 c++ function-pointers ellipsis

考虑以下程序:

#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/

相关文章:

c++ - Qt 中未捕获异常

未传递参数或 null 时的 Java 3 点参数 (varargs) 行为

html - 使用文本溢出时空格的位置 : ellipsis;

C++ 将带有十六进制字符的 .txt 转换为带有\x 的十六进制字符的 .text

c++ - opencv 中的(自适应)阈值错误(cvarrToMat 中的错误参数(未知数组类型))

c++ - 在 LLVM 中生成函数指针

c - 如何将 *this 指针隐式传递给结构中的函数指针

r - 如果我提供了错误命名的参数,则会触发有用的错误

java - NDK 与 JNI 同时调用返回类型为非原始类型的方法

数组中struct中的c++成员函数指针给出编译错误