是否重载parenthesis()效果构造函数调用?

时间:2015-02-12 06:22:59

标签: c++ constructor operator-overloading

我对()运算符重载的查询很少。我的问题是:

  1. 重载parenthesis()效果构造函数调用吗?
  2. 如果它会影响意味着我应该在构造函数/析构函数调用之前进行一些前/后处理吗?
  3. 如果问题2可能意味着我应该预先/后期处理什么,不应该处理什么?
  4. 如果你觉得这是任何其他问题的重复或者没有正确的方式问这个意思也在这里评论。提前谢谢....

2 个答案:

答案 0 :(得分:3)

问题:

  

是否重载parenthesis()效果构造函数调用?

不,它没有。 operator()函数可以与对象一起使用。构造函数使用类/结构名称。例如:

struct Foo
{
    Foo() {}
    int operator()(){return 10;}
};

Foo foo = Foo(); // The constructor gets called.
foo();           // The operator() function gets called.

Foo foo2 = foo(); // Syntax error. Cannot use the return value of foo()
                  // to construct a Foo.
int i = foo();    // OK.

答案 1 :(得分:2)

它不会干扰构造函数调用。原因是构造函数调用适用于类型,而构建实例,而operator()适用于已经构造了类型的实例

示例:

struct A
{
    A(int) {}
    void operator()(int) {}
};

int main()
{
    A(42); // calls the constructor A::A(int)

    A a(42); // also calls A::A(int)
    a(42); // calls A::operator(int)
}