c++ - 是否可以定义一个引用变量不占用额外存储空间的类?
问题描述
如果引用的对象在编译时已知,C++ 可以选择不为引用变量分配存储空间。这里的其他问题已经指出,对常量的引用不占用存储空间。
那么为什么 C++ 在以下情况下不执行不为引用变量分配存储的明显优化呢?rg
只能引用glob
,那为什么要为指针分配存储空间呢?
struct nowtref
{
int x;
};
int glob;
class withref
{
int x;
int& rg{glob};
};
int main(int argc, char* argv[])
{
printf("sizeof(withref) = %lu\n", sizeof(withref));
printf("sizeof(nowtref) = %lu\n", sizeof(nowtref));
}
运行时,该程序打印:
sizeof(withref) = 16
sizeof(nowtref) = 4
是否可以在不占用存储空间的类中进行引用?
解决方案
int& rg{glob};
这仅定义此引用的默认值。使用聚合初始化可以初始化此引用以引用其他对象。因此,这个引用不能(简单地)优化掉。
推荐阅读
- python - 部署应用程序时,“matplotlib”没有属性“cm”
- c# - Xamarin CrossMediaManager 视频仅适用于第一次运行
- jquery - 使用 Jquery 下载所选文件作为预览选项
- javascript - 创建外部 JS 页面以构建具有动态图表数量和类型的谷歌图表
- java - 在java中的同步块内调用@async方法
- javascript - Puppeteer:在选择器中转义方括号
- python - 硒未启用 chrome 69 上的 Flash
- python - 使用 backend.set_session 时 Keras 无法正确加载模型
- stm32 - 带有 dma 的 stm32f4 adc eoc 标志
- html - 具有不同卡片高度的引导布局在某些分辨率上被打破