Ale*_*Dan 3 c++ reference temporary
const int &ra=3;
Run Code Online (Sandbox Code Playgroud)
正如我所知,制作raconst将延长临时r值的生命周期,在这种情况下为3.这有点令人困惑,因为我知道ra应该有与r值相同的地址,这里是3,但是3是不是一个真正的变量,它没有存储它的存储器.那怎么可能呢?
有什么区别:
const int& ra=a;
Run Code Online (Sandbox Code Playgroud)
和
int& const ra=a;
Run Code Online (Sandbox Code Playgroud)Naw*_*waz 12
但是3不是一个真正的变量,它没有存储它的存储器.那怎么可能呢?
实际上,临时对象是从文字中创建的3,然后该临时对象绑定到const引用.这就是它成为可能的方式.
现在你的下一个问题是:这两者之间的区别
const int& ra=a;
int& const ra=a;
Run Code Online (Sandbox Code Playgroud)
是第二个声明是非法的.
1)编译器是否决定实际存储您的号码3是一个受优化决策影响的细节.就语言而言,临时对象与引用一样长.实际上,如果您只需要值(而不是对象),则可能永远不会存储该对象,而是编译器可以在您使用时直接替换该值ra.当然,如果你获取地址(via &ra),那么编译器将确保一个对象实际存储在某个地方,以便你可以获取它的地址.(它可能仍然直接在其他地方替换值,而不是从该地址加载它.)
2)第二个版本无效C++.你只能说,int const & x并且const int & x出于同样的原因,int const并且const int表示相同的类型.引用本身没有恒定的概念; 它始终绑定到初始化它的对象(即,您不能拥有"裸"引用对象).int & x;