<分区>
此代码在 Clang 上的表现令人惊讶。 Clang 中是否存在错误,或者 gcc 和 MSVC++ 错误?还是行为未定义?:
typedef set<int> A;
typedef map<int,A> B;
B gcctest;
A def;
A const& get(int key)
{
B::const_iterator j = gcctest.find(key);
if (j != gcctest.end())
return j->second;
return def;
}
int main()
{
def.insert(1);
int t = 47;
gcctest[t] = get(t);
cerr << (gcctest[t].size() ? "gcc or msvc++" : "clang") << endl;
}
似乎 Clang 在调用 get
之前在我的 map 中插入了一个默认构造的元素。如果 A
是简单类型,则不会发生这种情况,例如int
.
在 GCC 和 MSVC++++ 上它打印 gcc 或 msvc++。在 clang 打印 clang 上。
Linux 版本 4.6.3 上的 GCC
MacOS Xcode 5.0.2 上的 Clang
Windows VS2012 上的 MSVC++
(PS:请帮我为这个问题起一个更好的标题。)