gpt4 book ai didi

c++ - 字符串池/实习——这是好的做法吗?

转载 作者:行者123 更新时间:2023-11-28 00:24:44 27 4
gpt4 key购买 nike

例如,我有一个类,我在二进制文件中存储了一些有关的信息:

class car {
char car_manufacturer;
//other stuff
};

car_manufacturer 的值是以下值之一:

enum car_manufacturers : char {
VOLVO = 0,
AUDI,
MERCEDES
};

现在在这个示例应用程序中,用户需要他们的汽车制造商的字符串表示而不是数字,因此我创建了一个数组,其中包含枚举的字符串表示 ,其中数组的顺序与枚举,所以 car_manufacturer 可以用作数组索引

std::string car_manufacturers_strings[MERCEDES + 1] = {
"Volvo",
"Audi",
"Mercedes"
};

现在加载文件并从数据中创建一个 car 对象后,我可以简单地通过 car_manufacturers_strings[car.car_manufacturer]; 获取汽车的品牌,作为一个字符串;

这样做的好处是,如果汽车是同一品牌,我就不必在文件中存储一堆重复的字符串,这样我就可以节省很多空间。但这样做的缺点是代码稍微复杂一些。

那么这是好事还是坏事?

最佳答案

这是将枚举器的字符串表示形式提供为数组的非常标准的做法。

有一点是:

std::string car_manufacturers_strings[MERCEDES + 1] = {
"Volvo",
"Audi",
"Mercedes"
};

将字符串文字存储在二进制文件中,并在动态初始化阶段创建这些文字的拷贝作为 std::string 对象。

您可能希望将其更改为:

char const* const car_manufacturers_strings[MERCEDES + 1] = {
"Volvo",
"Audi",
"Mercedes"
};

这样它就不会不必要地创建这些拷贝。

关于c++ - 字符串池/实习——这是好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25621804/

27 4 0
文章推荐: c++ - 为什么必须将函数必须返回的数组声明为静态数组?
文章推荐: Jquery .show() 无法在 HTML5 数据描述符上使用 .find() - 需要帮助!
文章推荐: javascript - 阴影框叠加单击淡出
文章推荐: html - height 100% inside a
在 IE 中不起作用