相当简单的问题。 我应该在哪里存储错误,异常,用户消息? 到目前为止,我总是在函数内部声明本地字符串,它将被调用并且没有打扰。 e.g。
SomeClass::function1(...)
{
std::string str1("message1");
std::string str2("message2");
std::string str3("message3");
...
// some code
...
}
突然间,我意识到自建设以来每次调用初始化都可能非常昂贵。将它们作为静态字符串存储在类中甚至是单独的模块中会更好吗? 本地化并非如此。
提前致谢。
答案 0 :(得分:5)
为什么不在需要时使用字符串常量?
SomeClass::function1(...)
{
/* ... */
throw std::runtime_error("The foo blortched the baz!");
/* ... */
}
或者,您可以使用static const std::string
s。如果您希望将它们复制到许多其他std::string
,并且您的C ++实现执行copy-on-write,这是合适的:
SomeClass::function1(...)
{
static const std::string str_quux("quux"); // initialized once, at program start
xyz.someMember = str_quux; // might not require an allocation+copy
}
如果您希望制作这些string
的大量副本,并且不具有写时复制(或者不能依赖它存在),您可能希望使用boost::flyweight。
答案 1 :(得分:1)
TBH最好只在需要时构建错误消息(即如果出现问题,如果出现问题,则会出现严重错误)。如果消息总是出现,则最好静态定义它们以避免每次都初始化它们。但是,一般情况下,我只在调试模式下显示用户消息,因此如果您尝试执行性能构建,则很容易不显示它们。然后我只在需要时构建它们。