将volatile分配给非易失性,反之亦然

时间:2017-01-11 15:21:05

标签: c++ volatile

我想分析某个函数,为了获得更可靠的结果,我在循环中调用该函数。我担心编译器会看到我从不使用结果并优化掉我的循环,所以我想我可以将结果复制到标记为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

所以,

  1. 有没有其他方法可以将非易失性分配给易失性,反之亦然?或者,
  2. 还有另一种告诉编译器不要优化循环的方法吗?
  3. 注意:我无法修改类Bar。

0 个答案:

没有答案