考虑这个例子:
#include <iostream>
class myclass
{
public:
void print() { std::cout << "myclass"; }
};
int main()
{
myclass* p = 0x0; // any address
p->print(); // prints "myclass"
}
Run Code Online (Sandbox Code Playgroud)
我没有print通过myclass类型的对象调用成员函数.相反,我从一个指向内存中随机位置的指针调用它.这是一个定义的行为吗?也就是说,成员函数是否保证在创建任何类型的对象之前执行myclass?
Jon*_*ler 11
取消引用null(0)指针正在调用未定义的行为.该程序可以做任何喜欢的事情,包括按预期工作.
在某种程度上,你在这里侥幸成功,因为print()成员函数没有引用任何成员变量(没有任何成员变量),但编译器仍然可能生成会对你造成崩溃的代码.如果成员函数确实引用了任何成员变量,那么您将严重陷入未定义的行为.可能不值得尝试计算您可以执行的操作的范围,因为您正在调用未定义的行为,这可能因编译器,编译器,版本,平台,平台,运行而异.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |