在尝试编写一个类,调用它的构造函数和析构函数之间的持续时间时,我遇到了我认为是clang中的错误.(编辑:这不是一个bug;它是实现定义的副本省略)
timer下面的结构保存一个指向作为引用传入的持续时间对象的指针,并将范围的持续时间添加到此.
#include <iostream>
#include <chrono>
struct timer {
using clock = std::chrono::high_resolution_clock;
using time_point = clock::time_point;
using duration = clock::duration;
duration* d_;
time_point start_;
timer(duration &d) : d_(&d), start_(clock::now()) {}
~timer(){
auto duration = clock::now() - start_;
*d_ += duration;
std::cerr << "duration: " << duration.count() << std::endl;
}
};
timer::duration f(){
timer::duration d{};
timer _(d);
std::cerr << "some heavy calculation here" << std::endl;
return d;
}
int main(){
std::cout << "function: " << f().count() << std::endl;
} …Run Code Online (Sandbox Code Playgroud) 今天,我注意到,有几个简单的按位和算术运算的速度之间显著不同int,unsigned,long long和unsigned long long我的64位PC.
特别是,下面的循环是两次快速的unsigned为long long,这是我没有想到的.
int k = 15;
int N = 30;
int mask = (1 << k) - 1;
while (!(mask & 1 << N)) {
int lo = mask & ~(mask - 1);
int lz = (mask + lo) & ~mask;
mask |= lz;
mask &= ~(lz - 1);
mask |= (lz / lo / 2) - 1;
}
Run Code Online (Sandbox Code Playgroud)
(完整代码在这里)
下面是定时(以秒计)(为g++ …