c ++:地址将始终评估为真错误

时间:2013-06-06 14:58:17

标签: c++ function-pointers

我编写了自己的atexit方法,问题是,传入的所有内容都是1.当我尝试在将地址提供给我的atexit之前打印地址时,编译器生成了以下警告:

void dummy()将始终评估为“true”

void atexit(void(*func)(void))
{
   cerr << func << endl; // prints 1
   // store func for later
}

void dummy()
{
   cout << "dummy()\n";
}

cerr << &dummy << endl; // prints 1, generates warning
atexit(&dummy);

为什么它总是试图传递真实而不是地址? 注意:如果重要,真正的代码就是试图传递类的静态私有成员函数(singleton)的地址。

修改

我不在乎打印的地址是什么,这是一个例子。我想弄清楚的是为什么地址作为布尔值传递给atexit,因此总是为1。

1 个答案:

答案 0 :(得分:5)

ostream的

operator<<没有带有函数指针的重载,因此选择了bool重载。函数指针传递正常,它只转换为1进行打印(这就是警告与打印它的行相关的原因,而不是传递它的行。)

AFAIK没有可移植的方法来打印函数指针,而不是打印其对象表示的字节。