C++ 匿名联合(union) 用法

来源:互联网 发布:荣威rx5矩阵式大灯价格 编辑:程序博客网 时间:2024/05/29 11:14


匿名联合的关键点:

1. 没有对象的全局匿名联合必须定义存储类static;

2.只能定影共有(public)数据成员。

3.其数据成员和联合本身的作用域相同;

4.其数据成员共享内存。


1.作用域常见错误

示例代码:

#include <iostream> class A{ union{ int i; char c; }; int c; float i; }; int main() { union{ int a; char s; }; float a; return 0; }

编译结果:



2.全局匿名联合

示例代码:

#include <iostream> union { int i; char c; }; int main() { return 0; }
结果:
</pre><img src="http://img.blog.csdn.net/20140912212841968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbDEwMTYwNjAyMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" /><p></p><p><strong><span style="font-size:18px">3. 只能定义共有数据成员</span></strong></p><p><strong><span style="font-size:18px">错误代码:</span></strong></p><p><span style="font-size:18px"></span></p><pre code_snippet_id="467997" snippet_file_name="blog_20140912_5_239017" name="code" class="cpp"><pre name="code" class="cpp">#include <iostream>  int main() { union { int i;private: char c; }; return 0; }


结果:

3.占用内存

都是从起始地址存放数据成员。

示例代码:

#include <iostream>union A{char c1;int i;char c2;short s;}; int main() { A a; a.i =0x87654321; printf("%x\n", a.i); printf("%x\n", a.c1); printf("%x\n", a.c2); printf("%x\n", a.s); return 0; }

结果:



感谢 马光志老师编著的 《C++程序设计实践教程》(华中科技大学出版社)一书给我学习带来的帮助。

0 0
原创粉丝点击