0
struct Widget {
    void test() {}
};

int func() {}

int main() {
    std::cout << &Widget::test << std::endl;
    std::cout << Widget::test << std::endl;
    std::cout << func << std::endl;
    std::cout << &func << std::endl;
}

在这段代码中,只有第二行 main 函数没有编译。其他人打印1。为什么打印1。不应该打印函数的地址吗?为什么 second 不编译但 first 编译?

4

1 回答 1

2

为什么打印 1. 不应该打印函数的地址?

std::cout不可以打印 a void*,但是没有从函数指针类型到void*(对于常规函数指针和指向成员类型的指针)的隐式转换。从函数指针类型到bool虽然有一个转换。这就是我们最终的结果。

为什么 second 不编译但 first 编译?

因为标准要求你使用&来获取成员函数的地址。

于 2013-08-04T14:42:52.063 回答