问个C++简单的问题,程序的输出是什么?

haozlee 2011-04-20 11:31:04
以下程序的输出是什么?麻烦解释下。

#include <iostream>
using namespace std;

class A
{
public:
void f() {cout << "A::f()" << endl;}
};


int main()
{
A *pa = new A;
pa->f();
pa = NULL;
pa->f(); //还可以调用??

return 0;
}

...全文
178 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
is2120 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lihao21 的回复:]

各位大牛,你们所说的我自己都已经试验过了哦,现象我是知道的。
麻烦谁说下深层的原因???
[/Quote]

一个会引领 this 指针,而此时this指针为NULL,所以出错

不过前者也是未定义(UB),只不过行为可预测。
晓馨嫣梓 2011-04-21
  • 打赏
  • 举报
回复
我是这样理解的~一个对象在内存里面的形式只包含这个类的数据成员~而函数成员却是编译器后接上去的~用一种我们不知道的规则调用~~
其实可以把一个类理解为C里面的一个源文件,
NULL->f();这样f没有数据成员的话就可以
haozlee 2011-04-20
  • 打赏
  • 举报
回复
各位大牛,你们所说的我自己都已经试验过了哦,现象我是知道的。
麻烦谁说下深层的原因???
pathuang68 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yyg990441 的回复:]

这里你的f()成员函数正好没用使用到类的成员数据,所以可以,使用到成员数据就会报错。
[/Quote]

++。

增加一个数据成员,并在f()使用就不行了。


class A
{
public:
int a;
public:
void f() {cout << "A::f() " << a << endl;}
};


int main()
{
A *pa = new A;
pa->a = 10;
pa->f();
pa = NULL;
pa->f(); //还可以调用??

return 0;
}
haozlee 2011-04-20
  • 打赏
  • 举报
回复
我正疑惑,难道对一个地址为0的指针调用成员函数没有问题?
無_1024 2011-04-20
  • 打赏
  • 举报
回复
因为没有使用数据成员 NULL 的值是 0 即相当于 pa = (A)0
所以没什么问题
yyg990441 2011-04-20
  • 打赏
  • 举报
回复
这里你的f()成员函数正好没用使用到类的成员数据,所以可以,使用到成员数据就会报错。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧