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
。不应该打印功能的地址?为什么第二个不编译但是第一个呢?
答案 0 :(得分:2)
为什么要打印1.不应该打印功能的地址?
没有。 std::cout
可以打印void*
,但是没有从函数指针类型到void*
的隐式转换(既不是常规函数指针也不是指针指向成员类型)。但是,从函数指针类型到bool
的转换。这就是我们最终的结果。
为什么第二个不编译但是第一个呢?
因为标准要求您使用&
来获取成员函数的地址。