调用构造函数的语句,并且不执行任何操作 - 为什么不编译?

时间:2011-12-03 19:22:42

标签: c++ parsing constructor functor

我们可以有一个调用构造函数的语句,并且不执行任何操作吗?

基本上,我正在重载构造函数,并使用构造函数而不将其赋值给变量,就像我们通常那样。 (通常我们不会这样做,但我可能会在使用仿函数时看到这种情况。)

任何想法?....(我已将复制构造函数声明为私有,只是为了确保这不是导致问题的原因。)

class myClass
{
    public:
        myClass (int n, int x) { }
        myClass (int n ) { }
    private:
        myClass (const myClass & t){}  // copy constructor is private..... 
};

int main()
{
    int r = 5;
    myClass A( r );     // OK (as per usual)
    myClass ( r, r );   // OK
    myClass ( 5 );      // OK
    myClass ( r );      // not OK : error C2371: 'r' : redefinition; different basic types

    // myClass B = myClass ( r ); // this would not work as copy constructor
                                  // has been declared as private
    return 0;
}

2 个答案:

答案 0 :(得分:3)

由于C ++的解析规则,你必须用额外的括号说(myClass(r));

(你所说的是一个名为r的新变量的声明,它已经存在。请注意,你也可以说int(r);来声明r。)

答案 1 :(得分:0)

myClass (r);行实际上被解释为r类型myClass变量的定义(myClass r;),已定义为int