C++ 运算符void*()是什么意思?
我在谷歌上搜索了一下,但没有找到明确的答案。例如:C++ 运算符void*()是什么意思?,c++,C++,我在谷歌上搜索了一下,但没有找到明确的答案。例如: class Foo { public: operator void* () { return ptr; } private: void *ptr; }; 我理解什么是void*operator()。上面的运算符在不同的语法中是相同的吗?如果没有,是什么?我如何使用该操作符来获取ptr?它是一个类型转换操作符。每当类Foo的对象被强制转换(转换)为void*时,就会使用它。它确实不同于void*操作符
class Foo {
public:
operator void* () {
return ptr;
}
private:
void *ptr;
};
我理解什么是
void*operator()
。上面的运算符在不同的语法中是相同的吗?如果没有,是什么?我如何使用该操作符来获取ptr
?它是一个类型转换操作符。每当类Foo
的对象被强制转换(转换)为void*
时,就会使用它。它确实不同于void*操作符()
不,它们是两个不同的操作符。操作符void*
函数是类型转换函数,而操作符()
是函数调用操作符
第一个用于将Foo
的实例转换为void*
的实例,例如
Foo foo;
void* ptr = foo; // The compiler will call `operator void*` here
第二个用作函数:
Foo foo;
void* ptr = foo(); // The compiler calls `operator()` here
该函数定义了当对象转换为空指针时发生的情况,在这里它计算为成员
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";
}
}
另见:
opeator
缺少r@StephenTG谢谢ModifiedIt是一个cast操作符@Chad-这是一个转换运算符。有些转换是通过强制转换完成的,有些不是。这可能是对安全布尔习惯用法的一种尝试。请参见Sooperator()
可以实现以提供可调用对象?这会启用隐式转换吗?e、 g.如果我在Foo?@YZ.learner中实现了操作符[anytype]()
,那么我可以安全地将Foo传递给像void bar([anytype])
这样的函数吗?除了规范中的隐式转换(比如short
到int
等),您还可以通过两种方式获得隐式转换:通过“目的地”类包含一个采用“source”类型的非显式构造函数,或者通过像您的示例中那样的强制转换运算符。“否则它将是对象本身的地址,这个。”--不,它不会。我想你把这个对象和指向这个对象的指针混淆了。
$ g++ test.cc && ./a.out
I'm this: 0x7fff6072a540
Here, I look like this: 0
Here, I look like this: 0
test failed