从我读过和看过的内容来看,你不能将一个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) 特定
void foo( int&& x ) {
std::cout << &x;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但这个地址实际上代表了什么?int
调用foo时是否是临时创建的,这是地址所代表的内容?如果这是真的,如果我写int y = 5; foo(static_cast<int&&>(y));
,这是否会导致另一个临时创建或编译器智能地引用y?
在课堂上的讲座中,提出了这些幻灯片并没有太多解释.
这些似乎都在解释同样的事情,但我不明白为什么有数据读取或写入的双向箭头.
第一张幻灯片对我没有意义,因为如何在不翻译的情况下读取或写入虚拟地址?
是第二张幻灯片说一旦CPU有物理地址就可以读写它吗?
简而言之,我是否有办法从仅支持智能协议但不支持过滤器规范的git服务器中有效地(从空间角度)指定我想要的确切对象?
更多上下文:由于GitHub在pack协议中缺乏对过滤器规范的支持,我一直在尝试构建一种方法来获取一个数GB的存储库,其中单个提交也包含数GB。我的想法是使用want
仅指定单个提交对象的a 的获取包请求(或服务器上的上传包),然后从那里获取该对象,获取其引用的树,在另一个请求中获取该树对象,然后手动指定我想要从那里的Blob和树对象。不过,我发现,从为想要“提交”的特定提交或树提供尽可能多的数据的角度来看,pack协议似乎可以正常运行。
这对于我正在执行的操作的意义是,无论何时指定树哈希的提交,我不仅会获得提交或树对象,而且还可以获得它们包含的每个对象。在使用加深设置来限制我想要的提交次数时,也会发生这种情况。0不产生任何结果,1产生上述结果。我已经验证过want
,仅指定blob确实会导致带有该blob的打包文件,从而使该部分按预期工作。
我知道ASM基本上是最快的,但是HLL比抽象的ASM慢吗?抽象的意思是,例如在C++中你有一个类,需要存储关于类中存储的内容,它来自什么,私有/公共访问器和其他东西的数据.编译此代码时,是否有实际的汇编代码可以确定有关该类的信息?就像CPython是基于C构建的那样,在运行时运行时比C更多的抽象和指令.我说的是什么?我想我已经回答了我自己的问题,但我希望得到一个比我更有经验的人的回答.
编辑:我理解Python被解释但如果编译它不会比C慢吗?
我试图使用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].
谢谢!
function Box(width, height)
{
this.width = width;
this.height = height;
}
var myBox = new Box(5,5);
Run Code Online (Sandbox Code Playgroud)
什么是new
关键词技术上在这里做什么?它是否正在创建一个新功能?或者是创建一个新对象并将该函数应用于它?
如果是这样,那么这是一种创建"Box"的方法,这是否意味着this
关键字实际上是指对象myBox?
我最近一直在研究这个问题并且已经查看了各种文章和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一样,那么我可以看到名称冲突如何搞乱系统.这是什么原因?
我想不出任何其他原因,我想在盲目开始使用约定之前澄清这一点.
先感谢您
特定
#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搜索).