我想知道为什么以下小程序不会导致NullPointerException.有任何想法吗?输出是2x Hello World !!! 在我的macbook上使用clang-500.2.79.
#includeusing namespace std; class Strange { public: Strange() {} virtual ~Strange() {} void sayHello() { cout< sayHello(); (*s).sayHello(); return 0; }
Reinstate Mo.. 8
C++没有"NullPointerException".取消引用空指针只是未定义的行为,任何事情都可能发生.
在您的情况下,sayHello()
根本不访问*this
,所以它恰好"正常"工作(在您的编译器,优化设置,运行时和HW).但这并不能保证.未定义的行为是未定义的; 该程序也可以在线崩溃或订购披萨.
C++没有"NullPointerException".取消引用空指针只是未定义的行为,任何事情都可能发生.
在您的情况下,sayHello()
根本不访问*this
,所以它恰好"正常"工作(在您的编译器,优化设置,运行时和HW).但这并不能保证.未定义的行为是未定义的; 该程序也可以在线崩溃或订购披萨.