- 論壇徽章:
- 44
|
本帖最后由 windoze 于 2015-10-29 13:40 編輯
回復(fù) 7# wlmqgzm
這正常,boost考慮兼容性,很多地方有一些hack或者妥協(xié),STL是編譯器自帶的,只需要支持一個編譯器,不需要考慮兼容性,自然可以多做一些優(yōu)化。
一個典型的例子就是boost.variant,這個東西其實(shí)沒有用變長模板,而是用傳統(tǒng)的手段v<T1, <T2, <T3...>>>這么套起來的,但最里面的一對類型(必須得是一對,因?yàn)槔锩娴哪0宥ㄋ懒藘蓚參數(shù))就得有一個標(biāo)記為結(jié)束,然后它就用了一個boost::detail::variant::void_。最終的結(jié)果是,你寫泛型visitor的時候必須得處理這個類型,否則可能編譯不過去
另外boost.variant由于要支持老編譯器,沒有使用move語義,所以多了很多copy操作,如果你大量的用它放string,“效果”更加明顯。
我自己重新實(shí)現(xiàn)了一個variant,因?yàn)椴挥弥С掷暇幾g器,所以可以做很多優(yōu)化,比如不需要boost::detail::variant::void_這種東西,也完整支持move語義,綜合性能肯定要比boost的那個快一點(diǎn),當(dāng)然兼容性也差一點(diǎn)……嗯……很多……不支持全系列VC…… |
|