【Cherno的C++视频】Union in C++

#include <iostream>

// union: all the members are sharing the same memory address.
// it can only occupy the memory of one member at a time.
// the size of struct with 4 float is 16, the size of union with 4 float would still be 4 bytes.
// can't have virtual methods and usually used anonymously.
// really useful when you want multiple ways to address that same data.

struct Vector2
{
	float x, y;
};

struct Vector4
{// example:treating Vector4 as 2 Vector2 by using union.
	union
	{
		// first member.
		struct// wrap these 4 members in an anonymous struct.
		{
			float x, y, z, w;
		};
		// second member.
		struct
		{
			Vector2 a, b;// now a would be the same memory as x and y.
		};
	};
};

void PrintVector2(const Vector2& vector)
{
	std::cout << "vector.x = " << vector.x << ", " << "vector.y = " << vector.y << std::endl;
}

int main(void)
{
	struct TestUnion
	{
		union// 2 different way to address the same memory.
		{
			float a;
			int b;
		};
	};
	TestUnion u;
	u.a = 2.0f;
	std::cout << "u.a = " << u.a << ", " << "u.b = " << u.b << std::endl;

	Vector4 vector = {1.0f, 2.0f, 3.0f, 4.0f};
	PrintVector2(vector.a);
	PrintVector2(vector.b);
	vector.z = 500.0f;
	std::cout << "--------------------------" << std::endl;
	PrintVector2(vector.a);
	PrintVector2(vector.b);

	std::cin.get();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值