在第一个代码中,这两个代码是相同的,据我了解,变量(a和b)共享相同的内存位置,但是在第二个代码中,它给出了一个错误,有什么区别?
还(int&a = b)如何工作? Arent我们通过写int&a = b?将内存位置分配给一个整数。
int b = 9;
int &a = b;
cout<< &a << endl;
cout<< &b << endl;
int b = 9;
int a = 5;
&a = &b;
cout<< &a << endl;
cout<< &b << endl;
答案 0 :(得分:3)
据我了解,变量(a和b)共享相同的内存位置。
否。
a
是参考变量。引用不是对象,也不一定完全存储在内存中。无法获得未存储在内存中的地址。取引用变量的地址将得到引用对象的地址。
Arent,我们通过写int&a = b
将内存位置分配给整数
不,我们不是。我们在声明一个引用变量,该变量初始化为引用b
。
但是在第二个中它给出了一个错误
addressof运算符的结果是一个右值。您不能分配给右值。在第一个示例中,您永远不会尝试分配给addressof运算符的结果。
答案 1 :(得分:0)
&a = &b;
并没有您认为的那样。
&a
是一个临时值,是一个右值,是指向a
的指针。无法分配,因为它不存在。
答案 2 :(得分:0)
在第一个代码段中
router.post("/", authCheck, (req, res) => {
console.log("this is post data")
console.log(req.body) //This is logging undefined
})
int &a = b; /* valid syntax */
是对a
的引用,即b
和a
都将具有相同的存储位置,或者b
只是{{1}的另一个名称},没有为a
创建单独的内存,它使用的是b
的现有内存。
在第二个代码段中,
a
语句b
无效,因为它导致int b = 9;
int a = 5;
&a = &b; /* invalid syntax */
表达式。