隐式转换运算符重载语法

vth*_*lhu 2 c++ operator-overloading

我是一个中级C++用户,我遇到了以下情况.下面显示的类定义使用g ++编译器编译得很好.但我无法确定整个语法的含义.
我的猜测是该函数operator int()返回一个int类型.

此外,我无法弄清楚如何使用重载operator ()main()

class A
{
   public:
     A(int n) { _num = n; }  //constructor 

     operator int();

   private:
     int _num;
};

A::operator int()  // Is this equivalent to "int A::operator()" ??
{
  return _num;
}

int main()
{
  int x = 10;
  A objA(x);  //creating & initializing

  // how to use operator() ?
  // int ret = objA();   // compiler error when uncommented

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Jam*_*lis 8

operator int()是一个转换函数,它声明用户定义的转换A,int以便您可以编写类似的代码

A a;
int x = a; // invokes operator int()
Run Code Online (Sandbox Code Playgroud)

这不同于int operator()(),它声明一个函数调用运算符,它不带参数并返回一个int.函数调用操作符允许您编写类似的代码

A a;
int x = a(); // invokes operator()()
Run Code Online (Sandbox Code Playgroud)

您要使用哪一个完全取决于您想要获得的行为.请注意,转换运算符(例如operator int())可能会在意外时间被调用,并可能导致恶意错误.

  • "请注意,转换运算符(例如,运算符int())可能会在意外时间被调用,并可能导致恶意错误." 我说这有点强烈:__远离他们!__ (2认同)