0

0

c++如何将枚举(enum)转换为字符串_c++枚举类型转字符串方法

尼克

尼克

发布时间:2025-10-15 21:45:01

|

803人浏览过

|

来源于php中文网

原创

答案是使用映射、switch语句、宏或模板将C++枚举转为字符串。1. 用std::map关联枚举与字符串;2. switch直接返回对应名称,效率高;3. 宏定义同步生成枚举和转换逻辑,提升维护性;4. C++17可用constexpr模板泛化处理。根据需求选择方法。

c++如何将枚举(enum)转换为字符串_c++枚举类型转字符串方法

在C++中,枚举(enum)默认是整数类型,不能直接输出为字符串。如果想将枚举值转换为对应的字符串名称,需要手动实现映射关系。以下是几种常用且实用的方法。

1. 使用std::map或unordered_map映射

定义一个映射容器,把枚举值和对应的字符串关联起来,是最直观的方式。

示例代码:

#include 
#include 
#include 

enum class Color { Red, Green, Blue };

// 创建映射表 const std::map colorToString = { {Color::Red, "Red"}, {Color::Green, "Green"}, {Color::Blue, "Blue"} };

std::string enumToString(Color c) { auto it = colorToString.find(c); return (it != colorToString.end()) ? it->second : "Unknown"; }

int main() { Color c = Color::Green; std::cout << enumToString(c) << std::endl; // 输出: Green return 0; }

2. 使用switch语句转换

适用于枚举数量少、要求高效或不希望引入STL容器的场景。

std::string enumToString(Color c) {
    switch (c) {
        case Color::Red:   return "Red";
        case Color::Green: return "Green";
        case Color::Blue:  return "Blue";
        default:           return "Unknown";
    }
}

这种方法运行效率高,编译器通常会优化为跳转表,适合嵌入式或性能敏感场景。

立即学习C++免费学习笔记(深入)”;

3. 使用宏定义减少重复代码

通过宏统一定义枚举和字符串映射,避免写两遍名字,提高可维护性。

示例:

#define COLOR_LIST \
    X(Red)         \
    X(Green)       \
    X(Blue)

enum class Color {

FastGPT
FastGPT

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统

下载

define X(name) name,

COLOR_LIST

undef X

};

const char* colorToString(Color c) { switch (c) {

define X(name) case Color::name: return #name;

    COLOR_LIST

undef X

    default: return "Unknown";
}

}

利用预处理器宏,只需修改宏定义即可同步更新枚举和字符串转换逻辑,减少出错可能。

4. C++17及以上:结合if constexpr 和模板(进阶用法)

若需泛化处理多个枚举类型,可结合constexpr和模板实现类型安全的转换。

实际项目中仍推荐前三种方法,因更清晰易懂。

基本上就这些常用方式。选择哪种取决于项目需求:简单用switch,需要扩展性用map,追求维护性可用宏。没有语言原生支持,但合理设计就能解决。

相关专题

更多
typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

108

2023.09.26

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

335

2023.10.11

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

760

2023.08.22

switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

534

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

418

2024.03.13

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

527

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

6

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号