class Foo {
public:
operator void* () {
return ptr;
}
private:
void *ptr;
};
我理解void* operator()
是什么。上面的运算符在不同的语法中是一样的吗?如果没有,那是什么?我如何使用该运算符来获取ptr
?
答案 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()
不一样。