我读过引用只是符号表中存在的变量的别名。考虑下面的代码
int main()
{
int y = 6;
int &z = y;
int k = 43;
test(2,y,5,78);
cout << &y << "\n";
cout << &z << "\n";
cout << &k << "\n";
}
void test(int a,int & x, int g, int h)
{
cout << &a << "\n";
cout << &x << "\n";
cout << &g << "\n";
cout << &h << "\n";
}
Run Code Online (Sandbox Code Playgroud)
对于我得到的输出
0039F740
0039F848
0039F748
0039F74C
0039F848
0039F848
0039F830
Run Code Online (Sandbox Code Playgroud)
如果引用不占用堆栈中的内存,为什么内存会被偏移。例如。在功能测试中,局部变量a位于0039F740,而g位于0039F748。g 不应该在 0039F744 吗?
有人可以深入解释一下吗?
我已经阅读了SO的许多文章,并且了解了where子句和on子句中过滤之间的区别。但是,大多数示例都是在RIGHT表上进行过滤的(使用左联接时)。如果我有如下查询:
select * from tableA A left join tableB B on A.ID = B.ID and A.ID = 20
Run Code Online (Sandbox Code Playgroud)
返回值不是我期望的。我以为它首先过滤左表并仅获取ID = 20的行,然后对tableB进行左联接。
当然,这在技术上应与执行以下操作相同:
select * from tableA A left join table B on A.ID = B.ID where A.ID = 20
Run Code Online (Sandbox Code Playgroud)
但是我认为,如果可以在进行联接之前过滤表,性能会更好。有人可以启发我如何处理此SQL,并帮助我彻底理解它。