我试过这个:
class A{
void fun()
{
cout<<"Hello World";
}
};
int main()
{
A* obj;
obj->fun();
}
打印“Hello World”。但我没有分配任何记忆。
答案 0 :(得分:8)
有问题的代码使用未定义的行为,使用指针的不确定值。
它可能会崩溃或做任何事情,包括它可能会起作用。
如果成员函数不需要实例,请将其设为static
成员函数;然后你可以像A::fun()
一样调用它。
答案 1 :(得分:0)
这是一种未定义的行为,因为指针具有未定义的值。即使您尝试将值0分配给obj
,那么obj->fun()
也将是未定义的,并将导致未定义的行为。
C ++标准说:
如果左值引用的对象不是T类型的对象 并且不是从T派生的类型的对象,或者对象是 未初始化,需要进行此转换的程序 未定义的行为。
答案 2 :(得分:0)
你可以这样做 -
#include <stdio.h>
class A{
public:
static void fun()
{
printf("Hello World\n");
}
};
int main()
{
A::fun();
}
<强>优势:强>
答案 3 :(得分:0)
§9.3.1[class.mfct.non-static] / p2:
如果为对象调用类
X
的非静态成员函数 该行为不属于X
类型,也不属于X
类型 未定义。