2013-07-05 58 views
0

我对Windows 7使用Code::Blocks 10.05GCC。我与C++ constructors试验和我编译和执行下面的程序。对象创建异常

#include<iostream> 

using namespace std; 

class base { 
    public: 
    base() { 
     cout<<"\n Constructor Invoked\n"; 
    } 
}; 

int main() { 
    base ob; 
    return 0; 
} 

输出如预期并显示在下面。

Constructor Invoked 

但是,在输入程序时,我不小心编译了下面的程序。令我惊讶的是,它没有任何错误或警告编译。

#include<iostream> 

using namespace std; 

class base { 
    public: 
    base() { 
     cout<<"\n Constructor Invoked\n"; 
    } 
}; 

int main() { 
    base ob(); 
    return 0; 
} 

但该方案并未给出任何输出,只是一个空白屏幕。但没有错误或警告。由于它没有调用构造函数,我假设没有创建对象。但为什么没有错误或警告?我错过了非常明显的东西吗?

当我增加了行cout<<sizeof(ob);我得到了以下错误消息。

error: ISO C++ forbids applying 'sizeof' to an expression of function type 

那么什么是ob?它被视为功能还是对象?

请别人解释的代码base ob();行,什么是执行该行代码当记忆里却发生了什么?

谢谢。

+1

这是一个函数声明。有很多重复,尽管它们可能很难找到。 – juanchopanza

+3

阅读关于[最令人头痛的解析](http://en.wikipedia.org/wiki/Most_vexing_parse)。它的那[均匀初始化](http://en.wikipedia.org/wiki/C%2B%2B11#Uniform_initialization)中的溶液放置在C++ 11标准的原因之一。 –

回答

3

您已声明与

base ob(); 

功能它不会做任何事情。 见here