我有一个类似于这个的容器。
template <typename Nat, typename Elt>
class NatMap {
public:
Elt& operator[] (Nat nat) {
return tab [nat.GetRaw()];
}
private:
Elt tab [Nat::kBound];
};
我想放弃 Elt 拥有默认构造函数的要求:
template <typename Nat, typename Elt>
class NatMap {
public:
Elt& operator[] (Nat nat) {
return ((Elt*)tab) [nat.GetRaw()];
}
private:
char tab [Nat::kBound * sizeof(Elt)];
};
我使用 g++-4.3,这段代码在我的应用程序中的运行速度比前一个慢 25% 。不幸的是,放缓并未体现在综合基准中。我想这与编译器优化、别名、对齐或类似的东西有关。
我应该怎么做才能恢复我的表现?(虽然不需要默认构造函数)
更新:
刚才我尝试了新的 g++-4.4,它给了我后一个代码的以下警告:
dereferencing pointer '<anonymous>' does break strict-aliasing rules