operator void *()是什么意思?

时间:2013-08-13 17:46:31

标签: c++

我用Google搜索,但没有找到明确的答案。例如:

class Foo {
public:
    operator void* () {
         return ptr;
    }

private:
    void *ptr;
};

我理解void* operator()是什么。上面的运算符在不同的语法中是一样的吗?如果没有,那是什么?我如何使用该运算符来获取ptr

3 个答案:

答案 0 :(得分:15)

不,他们是两个不同的运营商。 operator void*函数是类型转换函数,而operator()是函数调用操作符。

当您要将Foo的实例转换为void*时,会使用第一个,例如

Foo foo;
void* ptr = foo;  // The compiler will call `operator void*` here

第二个用作函数:

Foo foo;
void* ptr = foo();  // The compiler calls `operator()` here

答案 1 :(得分:5)

该函数定义了将对象转换为void指针时发生的情况,此处它将计算为成员ptr指向的地址。

定义此转换函数有时很有用,例如:用于对象的布尔值评估。

以下是一个例子:

#include <iostream>

struct Foo {
    Foo() : ptr(0) {
        std::cout << "I'm this: " << this << "\n";
    }
    operator void* () {
        std::cout << "Here, I look like this: " << ptr << "\n";
        return ptr;
    }
private:
    void *ptr;
};

int main() {
    Foo foo;
    // convert to void*
    (void*)foo;
    // as in:
    if (foo) { // boolean evaluation using the void* conversion
        std::cout << "test succeeded\n";
    }
    else {
        std::cout << "test failed\n";
    }
}

输出结果为:

$ g++ test.cc && ./a.out
I'm this: 0x7fff6072a540
Here, I look like this: 0
Here, I look like this: 0
test failed

另见:

答案 2 :(得分:0)

这是一个类型转换运算符。只要将类Foo的对象转换(转换)为void*,就会使用它。它确实与void* operator()不一样。