小编Rag*_*nar的帖子

Clang修改析构函数中的返回值?

在尝试编写一个类,调用它的构造函数和析构函数之间的持续时间时,我遇到了我认为是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)

c++ clang++

9
推荐指数
1
解决办法
202
查看次数

C++ signed和unsigned int vs long long speed

今天,我注意到,有几个简单的按位和算术运算的速度之间显著不同int,unsigned,long longunsigned long long我的64位PC.

特别是,下面的循环是两次快速的unsignedlong 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++ …

c++ performance bit-manipulation

6
推荐指数
1
解决办法
2830
查看次数

标签 统计

c++ ×2

bit-manipulation ×1

clang++ ×1

performance ×1