c++ - 什么是 "operator T*(void)"以及它何时被调用?

标签 c++

我有 2 个文件:

/****demo.cpp****/
#include <iostream.h>
#include "gc.h"

class foo{};

int main(){
    gc<foo> x1;
    cout<<x1;
}

/*****gc.h*****/
template <class T> class gc 
{
    T* ptr;
public:
    operator T*(){}
};

如果我不编写 operator T*(){},那么我会遇到很多编译器错误。

所以请告诉我什么是 operator T*(void) 以及它何时被调用?

最佳答案

关于您的问题

operator type ()是所谓的转换运算符。如果需要转换为 type ,然后该运算符函数用于进行转换。

在您的示例中,cout 使用您的 operator T* ()使用用户定义的隐式转换将 x1 对象转换为指针,然后由 ostream 输出(cout 属于 std::ostream 类)operator<<这需要一个 void* 。

其他问题

为了帮助您解决其他问题,请将头文件名从 iostream.h 更改为至 iostream .标准 C++ 不知道 iostream.h .在 C++ 成为标准之前,这些文件就是这样调用的。此外,您使用的所有 C header ,如 math.h, stdio.h在 C++ 中仍然有效,但它们是所谓的向后兼容头文件。例如,您应该包括 cmathcstdio反而。这会将所有不是 C 中的宏的名称放入 namespace std .而不是使用 cout , 你使用 std::cout .其他标识符也是如此。

关于c++ - 什么是 "operator T*(void)"以及它何时被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/275169/

相关文章:

c++ - 分发原始 msvcp.dll 或安装 vc_redist.exe

c++ - OOP C++ - 错误,因为 A.h 包含 B.h,B.h 又包含 A.h

c++ - 如果没有另外说明,是否可以假定 get 方法是线程安全的?

c++ - 模板类上的 "unresolved external symbal"

c++ - 如何找到我的 C++ 应用程序正在使用的 header ?

c++ - 为什么 operator* of rvalue unique_ptr 返回一个左值?

c++ - 如何将目录添加到我的包含路径以避免在 C++ 中编写完整的目录路径?

c++ - 复制赋值运算符不起作用

c++ - C++ 链表中任意位置的插入/删除

c++ - 使用文件输入中的值初始化类中的 const 成员变量