我想分析某个函数,为了获得更可靠的结果,我在循环中调用该函数。我担心编译器会看到我从不使用结果并优化掉我的循环,所以我想我可以将结果复制到标记为volatile的变量以防止(demo here)。
#include <chrono>
struct Bar{};
Bar foo();
Bar profile_foo()
{
// result is marked volatile so the loop isn't optimized away
volatile Bar result;
for(int i = 0; i< 10000; i++)
result = foo();
return result;
}
int main(int argc, char* argv[])
{
using namespace std::chrono;
auto begin = high_resolution_clock::now();
auto result = profile_foo();
auto end = high_resolution_clock::now();
auto time_passed = duration_cast<milliseconds>(end-begin).count();
// validate result ...
}
事实证明,类的易失性/非易失性实例之间没有默认的复制构造函数/赋值运算符。请参阅this post。
所以,
注意:我无法修改类Bar。