小编Lew*_*han的帖子

如何强制函数仅接受左值引用参数

这是我的情况:

template<typename T, typename F>
inline
auto do_with(T&& rvalue, F&& f) {
    auto obj = std::make_unique<T>(std::forward<T>(rvalue));
    auto fut = f(*obj);
    return fut.then_wrapped([obj = std::move(obj)] (auto&& fut) {
        return std::move(fut);
    });
}
Run Code Online (Sandbox Code Playgroud)

我想确保模板参数F&& f只接受非const左值引用.我应该如何强制执行此操作?

c++ templates

17
推荐指数
2
解决办法
2264
查看次数

当参数作为右值传递时,完美的转发避免复制?

我正在读斯科特的书《有效的现代c ++》。在第26项中,有一个我在Wandbox上编写的示例:https ://wandbox.org/permlink/6DKoDqg4jAjA9ZTB

我想验证好的代码比坏的代码要好多少。但是,性能比较不是我期望的,即使是好的也比坏的要慢。我不知道怎么了。

为防止wandbox的代码消失,下面是代码:

#include <iostream>
#include <chrono>
#include <cstdlib>
#include <set>
#include <string>

using namespace std;

std::multiset<std::string> names;

void bad_logAndAdd(const std::string& name) {
    auto now = std::chrono::system_clock::now();
    names.emplace(name);
}
template <typename T>
void good_logAndAdd(T&& name) {
    auto now = std::chrono::system_clock::now();
    names.emplace(std::forward<T>(name));
}

void bad() {
    for (int i=0; i<1000000; i++) {
        string petname("cs");
        bad_logAndAdd(petname);
        bad_logAndAdd(std::string("abc")); 
        bad_logAndAdd("dog"); 
    }

}

void good() {
    for (int i=0; i<1000000; i++) {
        string petname("cs");
        good_logAndAdd(petname); 
        good_logAndAdd(std::string("abc")); 
        good_logAndAdd("dog");
    }

}

int main()
{ …
Run Code Online (Sandbox Code Playgroud)

c++ perfect-forwarding

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

添加.vimrc后vim81配置错误

我卸载了vim74并编译了vim81并安装了它.然而,与vim74相比,我发现它很奇怪.当HOME目录下没有.vimrc文件时,我打开一个c ++文件,语法高亮显示正常,我可以Backspace用来删除字母.但是,当我在HOME目录下添加一个.vimrc并且只是放入set number它时,当打开c ++源文件时,没有突出显示,也Backspace没有工作.这是为什么 ?我以前在vim74下的.vimrc中添加了一些配置,这种情况永远不会发生.

vim

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

使用ssh运行远程脚本文件时如何保留带有空格的参数?

我发现当我在本地运行一个脚本时,比如

./run.sh a "b c"
Run Code Online (Sandbox Code Playgroud)

在 run.sh 中使用“$@”时,它将识别两个参数。但是,当通过 ssh 在远程机器上使用时,就不是这样了。

ssh user@host ./run.sh a "b c"
Run Code Online (Sandbox Code Playgroud)

那么我应该如何实现这一目标?

ssh bash shell

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

标签 统计

c++ ×2

bash ×1

perfect-forwarding ×1

shell ×1

ssh ×1

templates ×1

vim ×1