首页 > 试题广场 >

下面代码会输出什么?() img alt="" sr

[单选题]
下面代码会输出什么()
class A {
public:
    int m;
    void print() {cout << "A\n";}
};

int main() {
    A *pa = 0;
    pa->print();
}


  • 什么都没输出
  • A
  • 编译报错
  • 其余选项都错
这里没有实例化这个类,也就是没有对象,而能够运行print函数那是因为print没有调用任何的成员变量,只是单纯输出一句话而已。
发表于 2017-09-06 15:44:31 回复(0)
更多回答
初始化为NULL(0)的类指针可以安全的调用不涉及类成员变量的类成员函数而不出错,但是如果类成员函数中调用了类成员变量则会出错,原因是调用成员函数的时候,函数地址是编译期间确定的,成员函数不通过对象指针去调用,对象指针仅仅作为参数传入函数然后去调用成员变量。而如果是虚函数,需要通过this去计算vptr,然后找到vtable,而this为NULL,因此会报错。
发表于 2017-09-05 21:48:51 回复(5)
初始化为NULL的类指针可以安全的调用不涉及类成员变量的类成员函数而不出错
发表于 2018-08-30 10:15:30 回复(0)
发表于 2017-12-02 20:57:40 回复(0)
初始化为NULL的类指针可以安全调用不涉及类成员变量的类成员函数。
编辑于 2018-11-30 21:29:27 回复(0)
成员函数并不绑定在对象上,在编译阶段就会确定地址,所以只要不涉及成员属性就不会报错,可以成功调用
发表于 2020-01-24 20:47:37 回复(0)
求解答  为什么0可以

其他数字就不行
发表于 2017-08-25 15:34:26 回复(2)

这题真郁闷,麻烦写规范点,我一看到语句不在函数内

就直接编译报错了。。。

发表于 2019-04-14 23:09:08 回复(0)
语法没问题, 所以编译不会出错, 调用成员函数是根据指针类型(结构体A)确定的, 跟空指针没关系, 如果这个题目访问成员变量, 就段错误了
发表于 2018-08-20 11:56:47 回复(0)
本题目应该是假设使用了命名空间 using namespace std;
发表于 2017-09-03 14:20:58 回复(0)
void print(A *this) {  cout << "A\n";  } 
A *pa = 0;
print_A(); 
代码可以这样理解
也就是:并不是类没有初始化就不能调用类的成员函数,如果成员函数只是简单的打印个东西,没有调用类成员啥的就不会报段错误。
发表于 2022-03-08 18:53:04 回复(0)
既没有入口函数也没有std命名空间,兄弟,逗我吗
发表于 2019-02-21 17:34:08 回复(0)
B
编辑于 2017-08-18 14:08:24 回复(0)