Enumerations and State
Enum Switch
A switch statement can make one branch for each enum value.
enum switch
Switching on an enum keeps branch labels tied to named states.
Enum Switch
enum_switch.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <string>
enum class OrderStatus {
NewOrder,
Paid,
Shipped
};
int main() {
OrderStatus status = OrderStatus::NewOrder;
std::string message;
switch (status) {
case OrderStatus::NewOrder:
message = "wait for payment";
break;
case OrderStatus::Paid:
message = "pack order";
break;
case OrderStatus::Shipped:
message = "send tracking";
break;
}
std::cout << "message=" << message << std::endl;
return 0;
}
#include <iostream>
#include <string>
enum class OrderStatus {
NewOrder,
Paid,
Shipped
};
int main() {
OrderStatus status = OrderStatus::Paid;
std::string message;
switch (status) {
case OrderStatus::NewOrder:
message = "wait for payment";
break;
case OrderStatus::Paid:
message = "pack order";
break;
case OrderStatus::Shipped:
message = "send tracking";
break;
}
std::cout << "message=" << message << std::endl;
return 0;
}
#include <iostream>
#include <string>
enum class OrderStatus {
NewOrder,
Paid,
Shipped
};
int main() {
OrderStatus status = OrderStatus::Shipped;
std::string message;
switch (status) {
case OrderStatus::NewOrder:
message = "wait for payment";
break;
case OrderStatus::Paid:
message = "pack order";
break;
case OrderStatus::Shipped:
message = "send tracking";
break;
}
std::cout << "message=" << message << std::endl;
return 0;
}
status ← 0, message ← (empty)
10int main() {11 OrderStatus status→ 0 = OrderStatus::NewOrder; //@status=OrderStatus::Paid, OrderStatus::Shipped12 std::string message→ (empty);switch (status)
14switch (status0) {15 case OrderStatus::NewOrder:message ← wait for payment
14switch (status) {15 case OrderStatus::NewOrder:16 message→ wait for payment = "wait for payment";17 break;message = "wait for payment";
15case OrderStatus::NewOrder:16 message = "wait for payment";17 break;18case OrderStatus::Paid:std::cout << "message=" << message << std::endl;
26 std::cout << "message=" << messagewait for payment << std::endl;27 return 0;28}outputmessage=wait for payment
status ← 1, message ← (empty)
10int main() {11 OrderStatus status→ 1 = OrderStatus::Paid;12 std::string message→ (empty);switch (status)
14switch (status1) {15 case OrderStatus::NewOrder:message ← pack order
17 break;18case OrderStatus::Paid:19 message→ pack order = "pack order";20 break;message = "pack order";
18case OrderStatus::Paid:19 message = "pack order";20 break;21case OrderStatus::Shipped:std::cout << "message=" << message << std::endl;
26 std::cout << "message=" << messagepack order << std::endl;27 return 0;28}outputmessage=pack order
status ← 2, message ← (empty)
10int main() {11 OrderStatus status→ 2 = OrderStatus::Shipped;12 std::string message→ (empty);switch (status)
14switch (status2) {15 case OrderStatus::NewOrder:message ← send tracking
20 break;21case OrderStatus::Shipped:22 message→ send tracking = "send tracking";23 break;message = "send tracking";
21 case OrderStatus::Shipped:22 message = "send tracking";23 break;24}std::cout << "message=" << message << std::endl;
26 std::cout << "message=" << messagesend tracking << std::endl;27 return 0;28}outputmessage=send tracking