作者yoco315 (眠月)
看板C_and_CPP
标题Re: [问题] 看Stroustrup 的C++後有不懂的问题想请教
时间Tue Mar 17 21:28:41 2009
回我知道的。
※ 引述《allstarschh (allstars)》之铭言:
: 我看的是Stroustrup的the C++ Programming lang
: 然後有几个问题想请教
: 1.在Chap3 3.11 Advice p.66 里 第七条
: Using string rather than char*
: 请问即使我对char * 用了简单的strcat strcpy这些library
: 会比string 还要来的慢吗???
嗯,对 std::string 比较快。
当初看到这点我也觉得很怪,所以就下去做了 benchmark,
後来发现 std::string 的效能的确比较好,
想了一下之後就知道原因:「因为 std::string 内部有保存字串的长度」
所以像是 strlen 这样的操作,std::string 可以 O(1) 做完。
另外 strcat 或是 strcpy 的操作,std::string 也因为知道长度,
所以 code gen 的时候可以直接生出像是 MOVE 这样效能好很多的码。
(STL 里面 copy 演算法也有用同样的手法加速)
总之重点是「多知道字串长度,可以作很多事情」
缺点是你要多记一个长度,记忆体就会用的会比 char* 多。
: 3. 在10.4.6.2 Member Constants p249
: 他说可以initialize a static integral constant member
: 为什麽只有int 可以 float那些为什麽不行呢???
原因我忘了,但是别的型态要直接指定在技术上也没有难度,
没记错的话《C++ Template Metaprogrammin》里面有讲到这点,
标准的这个规定已经算是不和时宜了,以後有机会拿掉这个限制。
--
To iterate is human, to recurse, divine.
递回只应天上有, 凡人该当用回圈. L. Peter Deutsch
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.110.89
1F:→ yoco315:另外 std::string 也可以实作 small string optimization 03/17 21:29
2F:→ yoco315:跟 copy on write optimization,效能会好上更多 03/17 21:30
3F:→ yoco315:不过 copy on write 现在少用了.. STLport 有实作 03/17 21:30