小编Jul*_*n__的帖子

如果声明vs if-else语句,哪个更快?

我前几天和朋友争论过这两个片段.哪个更快,为什么?

value = 5;
if (condition) {
    value = 6;
}
Run Code Online (Sandbox Code Playgroud)

和:

if (condition) {
    value = 6;
} else {
    value = 5;
}
Run Code Online (Sandbox Code Playgroud)

如果value是矩阵怎么办?

注意:我知道value = condition ? 6 : 5;存在并且我希望它更快,但它不是一个选项.

编辑(工作人员要求,因为问题暂时搁置):

  • 请通过考虑主流编译器(例如g ++,clang ++,vc,mingw)在优化和非优化版本或MIPS汇编中生成的x86汇编来回答.
  • 当汇编不同时,解释为什么版本更快和何时(例如"更好,因为没有分支和分支跟随问题blahblah")

c++ performance assembly microbenchmark c++11

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

如何在Scala中重构(if / elsif / elsif)链?

我有一连串的if/ else if陈述,这不是自我解释。我想用清晰的解释性名称将每个提取到其自己的函数中,然后将这些函数链接起来。

如何在Scala中途停止呼叫链?

这是一个代码示例:

// actual code 

for( klass <- program.classes ) {
    if ( complicated boolean ) { //checkVars
        error1
    } else if ( complicated boolean ) { //checkMethods
        error2
    } else if ( ... ) { //...
        error3
    } else {
        complicated good case code
    }
}
Run Code Online (Sandbox Code Playgroud)
// wanted 

for( klass <- program.classes ) {
    (checkName 
     andThen checkVars
     andThen checkMethods
     andThen addToContext) (klass)
// where the chaining stops if a check fails
}
Run Code Online (Sandbox Code Playgroud)

functional-programming scala higher-order-functions

8
推荐指数
1
解决办法
460
查看次数

使用组合而不是继承转发方法(使用C++特征)

我想使用组合并使用C++功能为每个可能的重载(noexcept,const,volatile)编写好的转发方法.

我们的想法是使用traits来确定方法是否被声明{noexcept/const/volatile/etc.}并相应地表现.

这是我想要实现的一个例子:

struct User{    
    UsedObject& obj;
    User(UsedObject& obj) : obj(obj) {}

    FORWARD_METHOD(obj, get); //here is where the forwarding happens
};

struct UsedObject{
    string m{"Hello\n"};

    string& get(double d){
        cout << "\tUsed :const not called...\n";
        return m;
    }
    const string& get(double d) const{
        cout << "\tUsed :const called...\n";
        return m;
    }
};
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止**:

// forward with noexcept attribute
// I'm not 100% sure about : std::declval<std::add_lvalue_reference<decltype(obj)>::type

template<typename... Args>
constexpr decltype(auto) get(Args && ... args)
noexcept(
         noexcept(std::declval<std::add_lvalue_reference<decltype(obj)>::type>().get(  std::forward<Args>(args)...  ))
         and
         std::is_nothrow_move_constructible<decltype( std::declval<std::add_lvalue_reference<decltype(obj)>::type>().get( …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates metaprogramming composition

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

如何按文件分割每个提交?

我知道如何手动拆分提交使用git rebase -i,但是如何自动拆分文件中的每个提交?

例如,提交A修改的3个文件,f1,f2和f3.分裂后,有3个提交A-f1,A-f2和A-f3.

我想这样做是为了使重写更容易,因为我只需要压缩一些小的提交.

git git-rebase git-rewrite-history

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

为什么这种并行搜索和替换不使用 100% 的 CPU?

我有一个很长的推文列表(200 万),我使用正则表达式来搜索和替换这些推文中的文本。

我使用joblib.Parallel 映射joblib是 scikit-learn 使用的并行后端)运行它。

我的问题是我可以在 Windows 的任务管理器中看到我的脚本没有使用 100% 的每个 CPU。它不使用 100% 的 RAM 或磁盘。所以我不明白为什么它不会走得更快。

某处可能存在同步延迟,但我找不到什么或在哪里。

编码:

# file main.py
import re
from joblib import delayed, Parallel

def make_tweets():
    tweets = load_from_file()  # this is list of strings

    regex = re.compile(r'a *a|b *b')  # of course more complex IRL, with lookbehind/forward
    mydict = {'aa': 'A', 'bb': 'B'}  

    def handler(match):
        return mydict[match[0].replace(' ', '')]

    def replace_in(tweet)
        return re.sub(regex, handler, tweet)

    # -1 mean all cores
    # …
Run Code Online (Sandbox Code Playgroud)

python regex multiprocessing python-3.x joblib

4
推荐指数
1
解决办法
1276
查看次数

Git:如何将现有的`merge`转换为`merge --squash`?

我执行了多次merge提交,但它们应该是merge --squash相反的.解决冲突花了一天多的时间,所以我不能手工重做合并.

有没有办法将其转换mergemerge --squash

git merge git-merge squash git-squash

2
推荐指数
1
解决办法
1339
查看次数

C++:切片到rvalue基础?

我遇到了以下代码,我在谷歌上找不到为什么以下语句是有效的C++:

Base&& b = Derived();
Run Code Online (Sandbox Code Playgroud)

请解释或参考

这是一个示例代码:

#include <iostream>
using namespace std;

class Base{
public:
    virtual ~Base(){}
    virtual void say_hi() { cout << "hi base"; }
};
class Derived : public Base{
public:
    virtual ~Derived(){}
    virtual void say_hi() { cout << "hi derived"; }
};

int main(int argc, const char * argv[]) {
    Base&& b = Derived();
    b.say_hi();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

印刷品:

hi derived
Run Code Online (Sandbox Code Playgroud)

c++ rvalue-reference c++11

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