0
我对Windows 7
使用Code::Blocks 10.05
与GCC
。我与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();
行,什么是执行该行代码当记忆里却发生了什么?
谢谢。
这是一个函数声明。有很多重复,尽管它们可能很难找到。 – juanchopanza
阅读关于[最令人头痛的解析](http://en.wikipedia.org/wiki/Most_vexing_parse)。它的那[均匀初始化](http://en.wikipedia.org/wiki/C%2B%2B11#Uniform_initialization)中的溶液放置在C++ 11标准的原因之一。 –