标签: temporary

在 (g)Vim 中隐藏(或折叠)文本列(水平)

有没有办法在 Vim 中编辑缓冲区(文本文件,你知道我的意思)的列吗?例如,在隐藏第 2 列和第 3 列之前缓冲区中可见的文本:

abbcccccc
accdddddd
Run Code Online (Sandbox Code Playgroud)

在隐藏它们之后:

acccccc
adddddd
Run Code Online (Sandbox Code Playgroud)

(更不用说我正在处理非常大的文件(有时超过 200 GB)。)

是的,我找到了 foldcol.vim,但它需要一个补丁,而且我没有 gcc 来作为服务器上的用户编译它。

提前致谢。

vim temporary folding hide

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

FCD中的右值和临时对象

我花了很长时间来理解右值和临时对象之间的区别.但现在最终的委员会草案在第75页说明:

一个右值 [...] 一个x值,临时对象或子对象,或它们的不与一个对象相关联的值.

我不敢相信自己的眼睛.这一定是个错误吧?


为了澄清,以下是我理解这些术语的方式:

#include <string>

void foo(std::string&& str)
{
    std::cout << str << std::endl;
}

int main()
{
    foo(std::string("hello"));
}
Run Code Online (Sandbox Code Playgroud)

在这个程序中,有两个表达式表示同一个临时对象:prvalue std::string("hello")和左值str.表达式不是对象,但它们的评估可能会产生一个.具体来说,prvalue的计算产生一个临时对象,但prvalue不是临时对象.有没有人同意我或让我疯了?:)

c++ temporary rvalue c++11

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

为什么可以通过引用为局部变量而不是临时变量返回函数?C++

例如,这个函数f定义如下:

int f(int x){return x;}
Run Code Online (Sandbox Code Playgroud)

如你所知你不能分配对这个临时int的引用:

int& rf=f(2);// this will give an error
Run Code Online (Sandbox Code Playgroud)

但如果我重新定义我的函数f如下:

int& f(int x){return x;}
f(2);// so now f(2) is a reference of x, which has been destroyed 
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:编译器怎么能不让你创建一个临时的引用,这个引用将在statment之后被销毁(在第一种情况下为int).另一方面,它允许你创建一个引用f(2),x而编译器知道这个将被销毁之后return.

c++ reference temporary

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

为什么+ =标准库中的有效临时值?

当我尝试在ideone上编译以下内容时:

class X
{
  public:
   friend X& operator+=(X& x, const X& y);
};

X& operator+=(X& x, const X& y) { return x; }

int main()
{
  X() += X();
}
Run Code Online (Sandbox Code Playgroud)

正如所料,这会引发编译错误,因为您无法将临时传递给非const引用.

但是,以下内容在ideone上成功编译:

std::string() += std::string();
Run Code Online (Sandbox Code Playgroud)

不应该像我上面的例子那样出错吗?

编辑:

如果std :: string()定义+=为成员操作,为什么在这样的用法允许左侧是临时的时候呢?为什么不像我上面那样定义它并避免引用临时问题?

c++ temporary

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

函数实际上是如何按值返回的?

如果我有一个类A(按值返回一个对象),并且两个函数f()和g()只有它们的返回变量不同:

class A
{
    public:
    A () { cout<<"constructor, "; }
    A (const A& ) { cout<<"copy-constructor, "; }
    A& operator = (const A& ) { cout<<"assignment, "; }
    ~A () { cout<<"destructor, "; }
};
    const A f(A x)
    {A y; cout<<"f, "; return y;}

    const A g(A x)
    {A y; cout<<"g, "; return x;}

main()
{
    A a;
    A b = f(a);
    A c = g(a);
}
Run Code Online (Sandbox Code Playgroud)

现在,当我执行该行时A b = f(a);,它输出:

copy-constructor, constructor, f, destructor假设f()中的对象y直接在目的地创建,即在对象b的内存位置创建,并且没有涉及临时值,这很好. …

c++ temporary return-by-value

5
推荐指数
2
解决办法
205
查看次数

在C++中为临时对象调用析构函数的顺序是什么?

请考虑以下代码:

#include <iostream>

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

struct B {
  ~B() { std::cout << "~B" << std::endl; }
};

struct C {
  ~C() { std::cout << "~C" << std::endl; }

  void operator<<(const B &) {}
};

C f(const A &a = A()) {
  return C();
}

int main() {
  f(A()) << B();
}
Run Code Online (Sandbox Code Playgroud)

使用GCC进行编译并运行会提供以下输出:

~C
~A
~B
Run Code Online (Sandbox Code Playgroud)

是否保证在与其他编译器一起编译时,将按此顺序调用类型A,B和C的临时对象的析构函数?一般来说,如果有的话,析构函数调用的顺序是什么?

c++ destructor temporary object-lifetime

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

临时对象破坏

为什么在评估完整表达式后调用临时对象的析构函数不是:

#include <iostream>


struct A 
{
    int a;
    A();
    ~A();
};

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

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



int main()
{
    A b = A(); //Constructing of temporary object and applies copy-initalization
    std::cout << "side effect" << std::endl;
    //Destructor calling.
}
Run Code Online (Sandbox Code Playgroud)

DEMO

输出:

A()
side effect
~A()
Run Code Online (Sandbox Code Playgroud)

但是12.2/3 [class.temporary]说:

当实现引入具有非平凡构造函数(12.1,12.8)的类的临时对象时,它应确保为临时对象调用构造函数.类似地,应该使用非平凡的析构函数(12.4)调用析构函数.临时对象作为 评估全表达式(1.9)的最后一步被销毁,该表达式(词法上)包含创建它们的点.

c++ temporary

5
推荐指数
0
解决办法
280
查看次数

如何传递临时数组?

我怎样才能传递临时数组?我想做这样的事情:

#include <iostream>

int sum(int arr[]) {
    int answer = 0;
    for (const auto& i : arr) {
        answer += i;
    }
    return answer;
}

int main() {
    std::cout << sum( {4, 2} ) << std::endl;       // error
    std::cout << sum( int[]{4, 2} ) << std::endl;  // error
}
Run Code Online (Sandbox Code Playgroud)

我在函数参数的括号中是否需要正整数文字[]?如果我包含该文字,它会限制我可以传递给那个大小的数组的数组吗?另外,如何通过rvalue引用或const引用传递数组元素?因为上面的示例没有编译,我认为制作函数的参数类型int&&[]const int&[]不起作用.

c++ arrays reference temporary parameter-passing

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

在类似函数的函数中转发和返回类型

我需要创建一个reduce类似的函数std::reduce,但不是处理容器,这个函数应该适用于可变参数.

这就是我目前拥有的:

template <typename F, typename T>
constexpr decltype(auto) reduce(F&&, T &&t) {
    return std::forward<T>(t);
}

template <typename F, typename T1, typename T2, typename... Args>
constexpr decltype(auto) reduce(F&& f, T1&& t1, T2&& t2, Args&&... args) {
    return reduce(
        std::forward<F>(f),
        std::forward<F>(f)(std::forward<T1>(t1), std::forward<T2>(t2)),
        std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)

以下按预期工作:

std::vector<int> vec;
decltype(auto) u = reduce([](auto &a, auto b) -> auto& {
        std::copy(std::begin(b), std::end(b), std::back_inserter(a));
        return a;
    }, vec, std::set<int>{1, 2}, std::list<int>{3, 4}, std::vector<int>{5, 6});

assert(&vec == &u); // ok
assert(vec == …
Run Code Online (Sandbox Code Playgroud)

c++ templates temporary template-meta-programming c++14

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

用git创建一个临时分支名称

此问题略相关,我想在shell脚本中使用一个临时分支。

有点像:

cd $(git rev-parse --show-toplevel) &&
git subtree split --prefix=some_subfolder -b temp &&
git push my_remote temp:publication_branch -f
Run Code Online (Sandbox Code Playgroud)

现在,我不确定如果分支temp已经存在,该怎么办,无论如何,我都不希望结果my_remote/publication_branch依赖于此。而且我也不想修改分支temp(假设我有不相关的东西)。充其量,我也会在最后进行清理

cd $(git rev-parse --show-toplevel) &&
git subtree split --prefix=some_subfolder -b temp &&
git push my_remote temp:publication_branch -f
git branch -D temp
Run Code Online (Sandbox Code Playgroud)

因此,我正在寻找一种创建尚不存在的临时分支名称的方法,类似于mktemp?是否有可以创建临时分支名称的git命令?

git shell temporary

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