小编Mel*_*are的帖子

为什么vim的删除命令这么慢

我有一个包含大约 5000 行的文件,我想删除所有包含“some_string”的行,所以我首先搜索/some_string然后执行:g//d. 删除约 90% 的行需要 5 分钟以上的时间。是什么赋予了?

相比之下,如果我运行sed -i '/some_string/d' some_file它需要 46 毫秒。

vim

5
推荐指数
1
解决办法
596
查看次数

什么时候构造函数调用静态对象

我知道静态变量是在编译时初始化的,但是静态对象呢?

例如,如果我有以下代码:

class A {
    A();
};

A::A(){
    std::cout << "Constructing A" << std::endl;
}

int main(){
    std::cout << "Hello World!" << std::endl;
    static A A_obj;
    std::cout << "Goodbye cruel world" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我应该期望输出是:

Hello World!
Constructing A
Goodbye cruel world
Run Code Online (Sandbox Code Playgroud)

要么

Constructing A
Hello World!
Goodbye cruel world
Run Code Online (Sandbox Code Playgroud)

c++

3
推荐指数
1
解决办法
111
查看次数

为什么这个64位比较被视为32位?

我试图生成一些随机的64位数字时遇到了这个奇怪的问题,并注意到这段代码只能给出低32位<0x8000_0000的数字.

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <cstdlib>
#include <ctime>

using namespace std;
void bin_range(uint64_t addr);
void print_range();

uint64_t GiB = 1024*1024*1024;
#define NUM_TRIES 10000
int range[14] = {0};

int main(){
    srand(time(NULL));
    for(int i = 0; i < NUM_TRIES; ++i){
        uint64_t addr = ((uint64_t) rand() << 32) | rand();
        addr &= 0x3FFFFFFFFFull;
        if(addr > ((uint64_t) 14*GiB)){
            --i;
            continue;
        }
        bin_range(addr);
    }
    print_range();

    return 0;
}

void bin_range(uint64_t addr){
    if(addr < GiB)
        range[0]++;
    else if(addr < 2*GiB)
        range[1]++; …
Run Code Online (Sandbox Code Playgroud)

c++ random

-1
推荐指数
1
解决办法
79
查看次数

标签 统计

c++ ×2

random ×1

vim ×1