c – 为什么rvalueconst引用有内存地址和大小?

c – 为什么rvalueconst引用有内存地址和大小?,第1张

概述我到处读到引用不是对象,它们只是别名,它们在内存中没有位置 int x = 256;int& rx = x;std::cout << x << " " << &x << std::endl; // Output: 256 0x15FAB0std::cout << rx << " " << &rx << std::endl; // Output: 256 0x15FA 我到处读到引用不是对象,它们只是别名,它们在内存中没有位置

int x = 256;int& rx = x;std::cout << x << " " << &x << std::endl;       // Output: 256  0x15FAB0std::cout << rx << " " << &rx << std::endl;     // Output: 256  0x15FAB0// seems legit ... fair enough ...

现在考虑以下内容

const int& r1 = 8;      // lvalue ref to const intint&& r2 = 32;          // rvlaue ref to intconst int&& r3 = 128;   // rvalue ref to const intstd::cout << r1 << " " << &r1 << std::endl;     // Output: 8     0x15FA8Cstd::cout << r2 << " " << &r2 << std::endl;     // Output: 32    0x15FA74std::cout << r3 << " " << &r3 << std::endl;     // Output: 128   0x15FA5C// and ...std::cout << sizeof(r1) << std::endl;   // Ouput: 4std::cout << sizeof(r2) << std::endl;   // Ouput: 4std::cout << sizeof(r3) << std::endl;   // Ouput: 4

那么为什么这些引用表现得像对象一样,它们确实有值,内存地址和大小……它们是否与引用规则不同?
他们是在堆栈上还是在其他地方?

解决方法 我猜你真正的问题是“当他们没有引用任何名字时,rvalue / const引用在哪里?”

const int& r1 = 8;      // lvalue ref to const intint&& r2 = 32;          // rvlaue ref to intconst int&& r3 = 128;   // rvalue ref to const int

在上述所有三种情况下,编译器在临时位置分配空间,将值放在那里,并为您提供对该值的引用.允许编译器这样做,因为它可以保证临时位置保持只读.

这就是你的引用获取它们的地址的方式 – 对象(8,32,128)仍然存在,因为编译器会为你创建它们.这些隐藏对象的地址成为引用的地址; sizeof运算符报告这些隐藏对象的大小.

总结

以上是内存溢出为你收集整理的c – 为什么rvalue / const引用有内存地址和大小?全部内容,希望文章能够帮你解决c – 为什么rvalue / const引用有内存地址和大小?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1221441.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存