c++ - 为什么可以在没有对象实例的情况下调用非静态成员函数?

标签 c++

<分区>

Possible Duplicate:
What will happen when I call a member function on a NULL object pointer?

好吧,我认为这段代码和程序输出可以 self 解释:

#include <iostream>
#include <string>
using namespace std;

class Test
{
public:
    void Not_Static(string args)
    {
        cout << args << endl;
    }
};

int main()
{
    Test* Not_An_instance = nullptr;
    Not_An_instance->Not_Static("Non-static function called with no object?");
    cin.ignore();
    return 0;
}

程序输出:

Non-static function called with no object?

为什么这是可能的?

最佳答案

未定义的行为。您的程序通过在空指针上调用方法来调用未定义的行为,因此允许一切,包括您的输出。

请记住:C++ 语言的规范并未指定每个可能程序的输出,以便为优化留出空间。许多事情没有明确检查,可能导致看似不正确或不合逻辑的行为,但实际上是未指定的。

关于c++ - 为什么可以在没有对象实例的情况下调用非静态成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8977625/

相关文章:

c++ - 使用 XCode 调试器跟踪递归函数

c++ - 调用 QTcpServer 时程序崩溃

c++ - 将原始数据输出到扬声器

c++ - TUIO 光标 + openframeworks

c++ - 无法推断编译器目标三元组

c++ - 我如何动态更新 QMenu 和子菜单标题文本

c++ - 为什么我的 getline 不能正确读取 .csv 文件?

c++ - 定义相对包含路径

c++ - openmp:即使有深度限制,递归任务也比顺序任务慢

c++ - 在指向数组转换的指针的上下文中,有人可以解释为什么这些转换是合法的还是非法的?