2011-12-03 48 views
1

我们可以有一个声明调用一个构造函数,并且不执行任何操作吗?声明调用构造函数,并且什么也不做 - 为什么它不能编译?

基本上,我重载构造函数,并使用构造函数,而不必将它分配给变量,就像我们通常那样。 (通常我们不会这样做,但我可能会看到使用函数时会出现这种情况。)

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

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; 
} 
+5

'无效的主要()'是**非法的C++ **。 –

回答

3

由于C++的解析规则,您必须说(myClass(r));,并带有额外的圆括号。

(你说的名字r,已经存在的一个新变量的声明。请注意,你也可以说int(r);申报r。)

+0

+1给食谱。 –

+0

谢谢。括号确实有效。但为什么包含整个陈述的括号实际上正在改变陈述本身的行为呢? (欢迎外部网站的链接,我无法找到它......)非常感谢! – alexandreC

+0

@alexandreC:刚刚阅读C++语法如何工作。第一个是声明声明,第二个是表达式。没有什么比这更深,它只是语法。 –

0

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

相关问题