C++ 初始化指向var的简单指针与引用指向var的指针

C++ 初始化指向var的简单指针与引用指向var的指针,c++,pointers,reference,C++,Pointers,Reference,鉴于上述代码,简单的ptr和ptr ref之间有什么区别(除了明显的区别) 与VC 2015/W4和GCC 7.1-Wall一起检查,因此ptr\u ref似乎是一个有效的构造 它是编译器偶然生成的某个临时指针的引用吗? 由于查看生成的汇编代码,可以看到定义ptr\u ref的两条指令,以及两条lea指令: int main() { int var = 10; int *const simple_ptr = &var; int *const &ptr_r

鉴于上述代码,简单的ptr和ptr ref之间有什么区别(除了明显的区别)

与VC 2015
/W4
和GCC 7.1
-Wall
一起检查,因此
ptr\u ref
似乎是一个有效的构造

它是编译器偶然生成的某个临时指针的引用吗? 由于查看生成的汇编代码,可以看到定义
ptr\u ref
的两条指令,以及两条
lea
指令:

int main()
{
    int var = 10;

    int *const simple_ptr = &var;
    int *const &ptr_ref = &var;

    int * &bad_ptr_ref = &var; // ERROR: cannot convert from 'int *' to 'int *&'
}
给出上面的代码,simple_ptr和ptr_ref之间有什么区别(除了明显的区别)

不同之处在于,
simple\u ptr
是指向
var
的不可变指针,
ptr\u ref
是指向执行
&var
时创建的指针的
常量&
。不过,这两种方法的作用是相同的,它们只会“指向”var

它是编译器偶然生成的某个临时指针的引用吗


是的,没错。
操作符&
(忽略重载)返回指向应用于的对象的指针。该指针由使其成为prvalue的值返回。您不能使用正常的左值引用绑定到它,这就是为什么
int*&bad\u ptr\u ref=&var失败。但是,由于
ptr\u ref
是一个
const
左值引用,它将绑定到该临时引用并延长其生命,直到引用超出范围。

您的问题太广泛了。把它分成几个独立的问题。关于(4):不仅指针是一样的
const
引用可以绑定到任何表达式,但非const引用只能绑定到左值。它怎么太宽泛了,主要问题是在这个特定的案例中,这两个定义与仅在这个案例中的定义有什么区别。@sharyex你问了4个不同的问题(我们在这里每个问题一个问题)这只是一个问题,其他的只是强调我想要的答案和解释,它们都是指同一件事。编辑。
    int *const simple_ptr = &var;
00E4220F  lea         eax,[var]  
00E42212  mov         dword ptr [simple_ptr],eax  
    int *const &ref_ptr = &var;
00E42215  lea         eax,[var]  
00E42218  mov         dword ptr [ebp-30h],eax  
00E4221B  lea         ecx,[ebp-30h]  
00E4221E  mov         dword ptr [ref_ptr],ecx