C ++ operator()括号 - 运算符Type()vs Type运算符()

时间:2017-05-29 17:30:22

标签: c++

有什么区别?

例如:int operator() vs operator int()

我正在寻找“官方”C ++文档的答案。

2 个答案:

答案 0 :(得分:2)

第一个(int operator())是函数调用操作符,它将对象转换为可以像函数一样调用的函数对象。此特定运算符返回int,缺少参数部分。

示例:

struct Foo
{
    int operator()(int a, int b)
    {
        return a + b;
    }
};

...

Foo foo;
int i = foo(1, 2);  // Call the object as a function, and it returns 3 (1+2)

另一个(operator int())是转换运算符。这个特定的允许对象隐式地(或显式地,如果声明explicit)转换为int必须返回int(或者使用任何类型,也可以使用用户定义的类型,如类或结构)。

示例:

struct Bar
{
    operator int()
    {
        return 123;
    }
};

...

Bar bar;
int i = bar;  // Calls the conversion operator, which returns 123

转换运算符与单参数构造函数相反。

答案 1 :(得分:0)

有很大的不同。

T operator()是一个呼叫运营商,因此您可以像这样“呼叫”您的课程:

class stuff {
    // init etc
    int operator()() {
        return 5;
    }
};

auto A = stuff(); // init that
cout << A() << endl; // call the object

operator T()用于将类的对象转换为T类型,因此您可以执行此操作:

class stuff {
    operator int() {
        return 5;
    }
};

auto A = stuff();
cout << int(A) << endl;

转化可以是严格的explicit,也可以是明确的或隐含的,如上所述。