隐式转换运算符重载语法 我是一个中级C++用户,我遇到了以下情况。下面显示的类定义可以使用g++编译器很好地编译。但我无法确切地理解整个语法的含义。 我猜函数运算符int返回一个int类型

隐式转换运算符重载语法 我是一个中级C++用户,我遇到了以下情况。下面显示的类定义可以使用g++编译器很好地编译。但我无法确切地理解整个语法的含义。 我猜函数运算符int返回一个int类型,c++,operator-overloading,C++,Operator Overloading,此外,我不知道如何在main中使用重载运算符 任何帮助都将不胜感激。运算符int是一个转换函数,它声明了从a到int的用户定义转换,以便您可以编写如下代码 A a; int x = a; // invokes operator int() A a; int x = a(); // invokes operator()() 这与int运算符不同,int运算符声明的函数调用运算符不带参数并返回int A a; int x = a; // invokes operator int() A a;

此外,我不知道如何在main中使用重载运算符

任何帮助都将不胜感激。

运算符int是一个转换函数,它声明了从a到int的用户定义转换,以便您可以编写如下代码

A a;
int x = a; // invokes operator int()
A a;
int x = a(); // invokes operator()()
这与int运算符不同,int运算符声明的函数调用运算符不带参数并返回int

A a;
int x = a; // invokes operator int()
A a;
int x = a(); // invokes operator()()

你想使用哪一个完全取决于你想得到的行为。请注意,转换运算符(例如运算符int)可能在意外时间被调用,并可能导致有害错误。

您可以使用此运算符

#include <iostream>
using namespace std;
class A{
public:
    A(int n)  { _num=n;}
    operator int();

private:
    int _num;

};
A::operator int(){

    return _num;

}
int main(){

    A  a(10);
    cout<<a.operator int()<<endl;
    return 0;

}

重载运算符?什么重载运算符?您的代码没有任何重载运算符。这就是你不能用它的原因。我大错特错了,关键字操作员把我带到别处去了。@vthulu:U的可能副本对社区来说似乎是新的,所以仅供参考,如果您对上述答案满意,您可能希望选择显示在此答案旁边的勾号,这基本上意味着您接受答案注意,转换运算符(例如运算符int)可能在意外时间被调用,并可能导致有害错误。我想说得更有力一点:离他们远点@炒作结束了。谢谢我读StackOverflow已经有一段时间了,但我从来没有真正贡献过。正如他们所说的-必要性…@sbi:是的,这是一个好的、大胆的建议-P每次我实现一个,它都是一个黑客。至少在C++0x中,使用显式转换运算符,其危害性将大大降低。@James:这里也是一样。我在过去十年里写的每一个人,不管怎样,在上半年;我从中吸取了教训,后来我不得不移除它,有时会很痛苦,因为它会在意外的时候被调用并导致问题。哦,我希望有人在C++1x方面有五年的经验,能为它写一本好书。