为什么在C ++中没有对象的情况下访问函数?

时间:2013-11-27 10:56:05

标签: c++

在以下程序中。

#include<iostream>

using namespace std;


class Base{


public:
    Base(){
    cout<<"I am Constructor"<<endl;
    }
    void method();


};

void Base::method(){
cout<<"I am method"<<endl;
}

int main()
{

    Base *sc1;
    Base *sc2;
    sc1->method();
    sc2->method();


}

我得到的输出如下

I am method
I am method

如果没有创建对象,这怎么会发生?

3 个答案:

答案 0 :(得分:5)

这是未定义的行为,所以“任何事情”都可能发生。它可能会运行,因为您不通过this指针访问任何内容(隐式或显式)。

这更有可能失败:

struct Foo
{
  int foo() const { return i; } 
  int i;
};

int main()
{
  Foo* f;
  f->foo();
}

答案 1 :(得分:3)

因为您没有对象,您的代码具有未定义行为。未定义的行为意味着它所说的,它并不意味着你的程序会崩溃,这意味着任何事情都可能发生,包括访问一个不存在的对象。

使编程C ++变得困难的一个原因是你不能依赖有问题的程序崩溃,有时它们似乎有效。

答案 2 :(得分:2)

这是未定义的行为,但它没有崩溃,因为您没有访问该类的任何成员变量,因此即使指针sc1 / sc2是随机值,也不会发生任何事情。