通过空指针调用方法在 C 中有效吗?
与重复问题类似,让我们检查一下这个 C 程序:
<code class="cpp">#include <iostream> using namespace std; class test { int i; public: test(): i(0) { cout << "ctor called" << endl; } void show() { cout << "show fun called" << endl; } }; int main(int argc, char *argv[]) { test *ptr = NULL; ptr->show(); return 0; }</code>
这里,我们在空指针 (ptr) 上调用 show() 方法,这提出了一个问题:这是一个有效的操作吗?
答案
通过空指针调用方法不是标准 C,并且被视为未定义行为。但是,某些编译器可能会通过跳过对空指针的检查来优化此代码以高效运行。
这样做的原因是该方法实际上并不需要 this 指针来执行其代码。编译器知道指针的类型,因此它可以找到该方法并运行其代码,而无需检查指针的值。
虽然出于性能原因,此行为可能很方便,但必须认识到这并不能保证行为并因不同的编译器和系统而异。依赖此优化可能会导致生产代码中出现意外和错误的行为。
因此,最佳实践是在使用空指针之前检查空指针,以确保代码的完整性和可预测性。
以上是在 C 中通过空指针调用方法是定义的行为吗?的详细内容。更多信息请关注PHP中文网其他相关文章!