我正在使用C++ 98。函数调用可以在多大程度上被重新排序?我没有使用任何全局状态,只有函数本地的对象状态。函数调用可以重新排序
我的具体情况是:
{
RaiiType T;
Object1.FunctionCall();
Object2.FunctionCall();
}
凡Object1和Object2的在未来的范围了声明。是否允许在任何函数调用后对T
的构造函数进行重新排序,假设它可以被平凡地证明(至少对于人类而言)构造和函数调用之间没有依赖关系?
在我的特殊情况下,RAII对象用于定时执行函数调用。
这取决于“没有依赖关系”。如果你的意思是无法观察到差异,那么是的,编译器(甚至CPU本身)可以自由地对操作进行重新排序。 –
不重新排序,改变观察到的行为。但是如果你不能说出区别,那么编译器可以根据“如果规则”做任何事情。 – sp2danny
你们其中一个人应该发布这个答案(最好是“好像规则”) – Creris