根据我所知,参考变量就像一个别名(同一个内存的另一个名称),所以在这种情况下它需要任何内存.
当我运行以下代码时:
class sample_class{ public: int num; //line1 int& refnum = num; //line2}int main(){ sample_class sample_object; cout<< "sample_class object size : " << sizeof(sample_object) <<endl; return 0;}
我得到的输出为:
解决方法 引用是别名,不应将其视为新变量.您无法获取其地址,也无法获得其大小.任何尝试这样做都将获得别名对象的地址或大小.实际上,大多数实现都像指针一样实现它们,但标准并不要求这样.它没有提到参考的预期大小.sample_class object size : 8
==>这里,num的大小是4个字节(32位编译器)和refnum,因为引用只是num的别名.那么,为什么在这种情况下,对象的大小是8?
==>另外,如果真的一个引用句柄就像一个别名,那么这个信息(refnum也保存/别名为num的同一个内存地址的信息)何时被存储?
编辑:
并考虑这种情况(changine sample_class的定义):
class sample_class{ public: char letter; //line3 char& refletter = letter; //line4 char letter_two; //line5}在这里,如果我打印sample_class对象的对象大小,我得到12(尽管letter,refletter和letter_two的大小都等于1).但如果我评论第4行,对象大小只是2.这是怎么回事?
我有兴趣从基础知识中学习,所以如果我在任何地方都错了,请纠正我
来自:http://en.cppreference.com/w/cpp/language/reference
References are not objects; they do not necessarily occupy storage,although the compiler may allocate storage if it is necessary to implement the desired semantics (e.g. a non-static data member of reference type usually increases the size of the class by the amount necessary to store a memory address).
编辑:c标准为实现提供了很多余地,以便自己决定类型和类的大小,以满足每个体系结构的独特要求.在这种情况下,在类的成员之间引入填充. c中没有要求类的大小必须等于其成员大小的总和.有关该主题的更多信息,请参阅cppreference.com上的Objects and alignment.
编辑2:关于sizeof(T&)似乎仍有一些混乱.
从http://en.cppreference.com/w/cpp/language/sizeof:
When applIEd to a reference type,the result is the size of the referenced type.
表达式sizeof(T&)被视为已写入sizeof(T).这并不意味着T& S的规模.等于T的大小.只是你无法直接用sizeof获得引用的大小.
总结以上是内存溢出为你收集整理的c中引用变量的记忆?全部内容,希望文章能够帮你解决c中引用变量的记忆?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)