gpt4 book ai didi

C++ - 调试中的字符串 ID,发布中的 int

转载 作者:行者123 更新时间:2023-11-30 02:40:53 25 4
gpt4 key购买 nike

在我的代码中,我使用了字符串 ID。这在调试和编码期间的代码中都很好。你可以这样想象:

MyCar * c = cars->GetCarID("my_car_1");
MyCar * c = cars->GetCarID(variable);

但由于 GetCarID 代码中的字符串 - 字符串比较,因此发布速度较慢。我想要这样的东西

MyCar * c = cars->GetCarID(CREATE_ID("my_car_1"));
MyCar * c = cars->GetCarID(CREATE_ID(variable));

CREATE_ID - 在调试中,它将返回用代码编写的字符串,在发布中,它将返回 int hash 或类似的东西。

我怎样才能做到这一点?或者这通常是如何解决的?

最佳答案

您可以将您的 id 包装在一个类中,例如:

class StringID
{
public:
StringID(const StringID&);
StringID(const char*);
StringID(const std::string&);

...

private:

#if DEBUG
std::string _idAsString;
#endif
int _id;
};

并为您的类定义通用操作,like operator< , operator==等等。通过这种方式,在发布版本上,您将拥有一个包装器 int在调试构建时,该类将包含字符串以使其更易于调试。

出于性能原因,您可以进行 id/哈希计算 constexpr并在编译时为字符串文字计算它(有关更多信息,请查看:Computing length of a C string at compile time. Is this really a constexpr?)。

使用这种方法,您可以通过在 Debug模式下检查字符串来捕获哈希冲突,而不仅仅是哈希。您可能已经知道,不同的字符串可能导致相同的散列(对于常见的英语单词来说不太可能,但有可能),如果不知道生成散列的字符串,这将很难调试。

关于C++ - 调试中的字符串 ID,发布中的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com