1

比较简单的问题。我应该在哪里存储错误、异常、用户消息?到目前为止,我总是在将要调用它的函数中声明本地字符串并且没有打扰。例如

SomeClass::function1(...)
{
std::string str1("message1");
std::string str2("message2");
std::string str3("message3");
...
// some code
...
}

突然我意识到,由于每次都调用构造和初始化,它可能非常昂贵。将它们作为静态字符串存储在类中甚至在单独的模块中会更好吗?本地化不是这里的情况。

提前致谢。

4

2 回答 2

5

为什么不在需要的时候使用字符串常量呢?

SomeClass::function1(...)
{
/* ... */
    throw std::runtime_error("The foo blortched the baz!");
/* ... */
}

或者,您可以使用static const std::strings. 如果您希望将它们复制到许多其他std::strings,这是合适的,并且您的 C++ 实现会在写入时复制:

SomeClass::function1(...)
{
    static const std::string str_quux("quux"); // initialized once, at program start
    xyz.someMember = str_quux; // might not require an allocation+copy
}

如果您希望制作大量这些strings 的副本,并且您没有写时复制(或不能依赖它存在),您可能需要考虑使用boost::flyweight

于 2009-08-06T18:56:34.693 回答
1

TBH 最好只在需要时构建错误消息(即,如果出现严重错误,谁在乎你是否会减速)。如果消息总是会出现,那么最好静态定义它们以避免它们每次都会被初始化的事实。不过,一般来说,我只在调试模式下显示用户消息,因此如果您尝试进行性能构建,很容易不显示它们。然后我只在需要时才构建它们。

于 2009-08-06T18:58:33.113 回答