小编eda*_*els的帖子

为什么可以将rvalue间接绑定到左值引用而不是直接绑定?

从我读过和看过的内容来看,你不能将一个rvalue的表达式绑定到左值引用.然而,我所看到的是你可以将rvalue绑定到rvalue引用,并且由于命名的rvalue引用本质上是一个左值,你可以将它绑定到左值引用.禁止将右值绑定到左值引用的原因是什么.它是出于优化目的吗?

举个例子:

#include <iostream>

using std::cout;

void bar ( int& b ) {

    cout << "bar " << b << "\n";
    b = 3;
}

void foo ( int&& a ) {

    cout << a << "\n";
    bar(a);
    cout << a << "\n";
}

int main ( int argc, char ** argv ) {

    foo(1);
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14

10
推荐指数
2
解决办法
1723
查看次数

取rvalue引用的地址是什么意思?

特定

void foo( int&& x ) {

    std::cout << &x;
}
Run Code Online (Sandbox Code Playgroud)

这有效,但这个地址实际上代表了什么?int调用foo时是否是临时创建的,这是地址所代表的内容?如果这是真的,如果我写int y = 5; foo(static_cast<int&&>(y));,这是否会导致另一个临时创建或编译器智能地引用y?

c++ c++11 c++14

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

对数据读/写进行非翻译意味着什么?

在课堂上的讲座中,提出了这些幻灯片并没有太多解释.

幻灯片1 幻灯片2 幻灯片3

这些似乎都在解释同样的事情,但我不明白为什么有数据读取或写入的双向箭头.

  • 第一张幻灯片对我没有意义,因为如何在不翻译的情况下读取或写入虚拟地址?

  • 是第二张幻灯片说一旦CPU有物理地址就可以读写它吗?

memory operating-system memory-management virtual-memory

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

可以指示git fetch pack提取单个树对象吗?

简而言之,我是否有办法从仅支持智能协议但不支持过滤器规范的git服务器中有效地(从空间角度)指定我想要的确切对象?

更多上下文:由于GitHub在pack协议中缺乏对过滤器规范的支持,我一直在尝试构建一种方法来获取一个数GB的存储库,其中单个提交也包含数GB。我的想法是使用want仅指定单个提交对象的a 的获取包请求(或服务器上的上传包),然后从那里获取该对象,获取其引用的树,在另一个请求中获取该树对象,然后手动指定我想要从那里的Blob和树对象。不过,我发现,从为想要“提交”的特定提交或树提供尽可能多的数据的角度来看,pack协议似乎可以正常运行。

这对于我正在执行的操作的意义是,无论何时指定树哈希的提交,我不仅会获得提交或树对象,而且还可以获得它们包含的每个对象。在使用加深设置来限制我想要的提交次数时,也会发生这种情况。0不产生任何结果,1产生上述结果。我已经验证过want,仅指定blob确实会导致带有该blob的打包文件,从而使该部分按预期工作。

git go-git

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

为什么某些编程语言比其他语言更快?

我知道ASM基本上是最快的,但是HLL比抽象的ASM慢吗?抽象的意思是,例如在C++中你有一个类,需要存储关于类中存储的内容,它来自什么,私有/公共访问器和其他东西的数据.编译此代码时,是否有实际的汇编代码可以确定有关该类的信息?就像CPython是基于C构建的那样,在运行时运行时比C更多的抽象和指令.我说的是什么?我想我已经回答了我自己的问题,但我希望得到一个比我更有经验的人的回答.

编辑:我理解Python被解释但如果编译它不会比C慢吗?

theory compiler-construction performance assembly

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

AWK - 当RS是正则表达式时使用RT给出了下一个匹配的RS而不是当前的RS

我试图使用gawk从日志中提取段落,它正在完美地工作,我想要包括它找到的记录分隔符.

这是命令:

gawk --re-interval 'BEGIN{RS="[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}.[0-9]{1,6} \\[[A-Z]*\\]";} /983a99f8-bec6-11e1-80dd-059a821d0b73/ {print $0}' full.log 
Run Code Online (Sandbox Code Playgroud)

如果我添加打印RT,$ 0,则打印下一个匹配的RT而不是当前匹配.

这是一些示例文本

9:08:06.899627 [DEBUG] <0.30065.3>@agent:1565 Recs to loop through:  [{agent_state,"OpenAcdAgent43","Jeff",
                            undefined,wrapup,
                            {call,"983a99f8-bec6-11e1-80dd-059a821d0b73",
                                voice,
                                {"8501112234","MorganGrimes"},
                                "9201",<0.30392.3>,[],
                                {client,"8221314","DCF",[],1340629596,
                                    1340629596},
                                [creole_general],
                                <0.30398.3>,outband,inband,inbound,10},
                            1340629658,undefined,"Default",1340629658
9:08:06.899707 [INFO] <0.168.0>@cpx_monitor:649 Down message for reference #Ref<0.0.16.137225> of <0.30064.3> due to normal
Run Code Online (Sandbox Code Playgroud)

我想成为9:08:06.899627 [DEBUG]能够做到的是在我的比赛前9:08:06.899627 [DEBUG],但RS取消了.我得到9:08:06.899707 [INFO].

谢谢!

regex awk grep

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

这在JavaScript函数中引用了什么?

function Box(width, height)
{
  this.width = width;
  this.height = height;
}

var myBox = new Box(5,5);
Run Code Online (Sandbox Code Playgroud)
  1. 什么是new关键词技术上在这里做什么?它是否正在创建一个新功能?或者是创建一个新对象并将该函数应用于它?

  2. 如果是这样,那么这是一种创建"Box"的方法,这是否意味着this关键字实际上是指对象myBox?

javascript prototype function

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

为什么在LKM中使用静态函数是一种约定

我最近一直在研究这个问题并且已经查看了各种文章和stackoverflow帖子,但我似乎无法找到一个直接的答案.在创建内核模块时,我看到大多数代码如下所示:

#include <linux/init.h>
static int test_init(void) {return 0;}
static void test_exit(void) {;}
module_init(test_init);
module_exit(test_exit);
Run Code Online (Sandbox Code Playgroud)
  • 我发现的一个可能原因是,这样做会增加将恶意代码注入正在运行的模块的难度.

  • 另一个是命名空间不那么混乱,但这不仅仅是你正在链接和编译的内核模块的上下文中的问题吗?如果insmod实际上将代码链接到内核就像ld一样,那么我可以看到名称冲突如何搞乱系统.这是什么原因?

我想不出任何其他原因,我想在盲目开始使用约定之前澄清这一点.

先感谢您

c linux operating-system kernel kernel-module

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

为什么在这里没有对参考初始化进行复制 - 初始化?

特定

#include <iostream>

using namespace std;

struct Test {


public:
    Test() {

        cout << "Default constructor" << endl;
    }

    Test(const Test &) {

        cout << "Copy constructor" << endl;
    }
};

int main() {

    Test && t1 = Test();
}
Run Code Online (Sandbox Code Playgroud)

为什么在初始化t1时,不使用Test的复制构造函数?从读取引用初始化看来,它object是一个临时应该调用复制初始化.或者这是一个类类型表达式?如果是这种情况,有人可以定义类类型表达式是什么(我很难用Google搜索).

c++ c++11 c++14

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