CPP20 Introduction: New Operator<=>

CPP20 Introduction: New Operator <=>

Author: kagula

Date: 2-18-2023

Introduction

        A concise description of how to use cpp20 new operator <=> by examples.

Environment & Dependencies

  • Microsoft Visual Studio Community 2022 17.4.5
  • Microsoft Unit Test Framework
  • Change C++ Language Standard's default setting to ISO C++ 20 Standard in the new unit test project properties.

Content

        Operator <=> is consist of operator <, operator ==, and operator > and it takes precedence over these comparison operators when they use together.

        Operator <=> returns one of six possibles which are less, greater, equivalent (or equal), these prefixes with std::strong_ordering or std::partial_ordering, respectively.

		TEST_METHOD(TestBetweenIntegerVariables)
		{
			int x = 1, y = 2;
			Assert::IsTrue(x <=> y == std::strong_ordering::less);
			Assert::IsTrue(x <=> 1.0 == std::partial_ordering::equivalent);

			if (x <=> y == std::strong_ordering::equal == false)
			{
				//std::strong_ordering::equal's  alias is std::strong_ordering::equivalent
				Logger::WriteMessage("the variable x is not equal y.\n");
			}

			//In addition, all types of the C++ standard library that provide relational operators also provide operator<=>

			Logger::WriteMessage("TestBetweenIntegerVariables is done.\n");
		}

		TEST_METHOD(TestBetweenObjects)
		{
			using namespace std;
			class Person {
				string _firstName;
				string _lastName;//last name is sur name.

			public:
				Person(const string firstName, const string lastName)
				{
					_firstName = firstName, _lastName = lastName;
				}

				//I don't like using auto placeholder, so...
				std::strong_ordering operator <=>(Person& rhs) const
				{
					auto cmp1 = _lastName <=> rhs._lastName; // primary member for ordering
					if (cmp1 != 0) return cmp1;

					return _firstName <=> rhs._firstName;
				}
			};

			Person a("A","kagula"),b("B", "kagula");

			if (a <=> b == std::strong_ordering::less)
			{
				Logger::WriteMessage("the object a is less than b.\n");
			}

			Logger::WriteMessage("TestBetweenObjects is done.\n");
		}

Reference

  1. <<C++20 The Complete Guide>> First Edition by Josuttis N.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值