我有这个简单的功能:
bool foo(const std::string& str)
{
static const std::string ky[] = { "KeyWord1", "KeyWord2", "KeyWord3" };
static const std::set<std::string> kySet(ky, ky+ sizeof(ky)/sizeof(ky[0]));
return kySet.find(str) != kySet.end();
}
它基本上拥有一组预设关键字,并测试给定的字符串是否为关键字之一。
我使用
static
是因为我只需要一个预设变量的副本。这将在多线程环境和不同体系结构中运行。但是,有人告诉我这仅在Linux上是线程安全的,但在AIX和Solaris上会破坏。
我不明白为什么会破裂?
最佳答案
引用03标准
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf
第6.7节
没有提到线程。因此,除非单线程调用了函数,否则应该考虑函数静态变量不是线程安全的。