例如,我有一个类,我在二进制文件中存储了一些有关的信息:
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/