0

我正在使用Code::Blocks 10.05with GCCon Windows 7。我正在试验,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();行以及执行该代码行时内存中实际发生的情况?

谢谢你。

4

1 回答 1

3

你已经声明了一个函数

base ob();

它不会做任何事情。看这里

于 2013-07-05T09:33:22.387 回答