编译:
#include <iostream>
int main()
{
for (int i = 0; i < 4; ++i)
std::cout << i*1000000000 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
并gcc产生以下警告:
warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations]
std::cout << i*1000000000 << std::endl;
^
Run Code Online (Sandbox Code Playgroud)
我知道有一个有符号的整数溢出.
我不能得到的是为什么i价值被溢出操作打破了?
我已经阅读了为什么x86上的整数溢出与GCC导致无限循环的答案?,但我仍然不清楚为什么会发生这种情况 - 我认为"未定义"意味着"任何事情都可能发生",但这种特定行为的根本原因是什么?
编译: gcc (4.8)
我在C#度过了最近4年,所以我对C++中当前的最佳实践和常见设计模式感兴趣.考虑以下部分示例:
class World
{
public:
void Add(Object *object);
void Remove(Object *object);
void Update();
}
class Fire : Object
{
public:
virtual void Update()
{
if(age > burnTime)
{
world.Remove(this);
delete this;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们有一个负责管理一组对象并定期更新它们的世界.火是一种可能在许多不同情况下被添加到世界中的物体,但通常是世界上已有的另一物体.Fire是唯一知道什么时候它已经烧毁的对象,所以目前我已将它自行删除.造成火灾的对象可能不再存在或相关.
这是一件明智的事情还是有更好的设计来帮助清理这些物体?