c中引用变量的记忆?

c中引用变量的记忆?,第1张

概述我刚开始从基础知识中学习Cpp,当我遇到参考变量时我很困惑. 根据我所知,参考变量就像一个别名(同一个内存的另一个名称),所以在这种情况下它需要任何内存. 当我运行以下代码时: class sample_class{ public: int num; //line1 int& refnum = num; //line2}int main(){ 我刚开始从基础知识中学习Cpp,当我遇到参考变量时我很困惑.

根据我所知,参考变量就像一个别名(同一个内存的另一个名称),所以在这种情况下它需要任何内存.

当我运行以下代码时:

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中引用变量的记忆?所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存