首页 > 解决方案 > 为什么未初始化的指针可以访问类成员?

问题描述

class C {
    public:
    C(int x):
    _x(x){}
    void print(){
        std::cout<<_x<<std::endl;
    }    
    int _x;
};

int main(){
C* c;
c->print(); // print 0 !
return 0;
}

c 是 C 类型的指针,但它没有指向任何东西!那么为什么c->print()有效呢?

例如,如果我尝试

int* p;

我无法编译,因为我试图指向任何内容并且编译器阻止了我。

我应该使用

int* p = nullptr;

或指向给定的参考。它应该与定义的类型 C 相同吗?而不是 'int' 我使用 'C' 那么为什么不同的结果呢?

标签: c++

解决方案


您的程序具有未定义的行为。这意味着您做了一些非法的事情(通过未初始化的指针间接),但编译器不需要捕获它,并且程序可能在运行时看起来可以工作,但这种行为永远无法保证。


推荐阅读