msvcp80.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::data

这个是不是一个事件?
我应该怎样分析出的它的含义...?
大家帮帮忙..

  • 标 题:答复
  • 作 者:itcool
  • 时 间:2009-06-09 10:49

006A1131    68 70C16C00     push asktao.006CC170                 ; ASCII "xx_kk"
006A1136    8D4C24 24       lea ecx,dword ptr ss:[esp+24]
006A113A    8BD8            mov ebx,eax
006A113C    FF15 58136C00   call dword ptr ds:[<&MSVCP80.std::ba>; msvcp80.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >

类似这样的代码 应该怎么分析?

  • 标 题:答复
  • 作 者:iicup
  • 时 间:2009-06-10 20:52

std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >

首先是最外层:
std::basic_string<X,Y,Z >::basic_string<X,Y,Z >
其中:
X = char
Y = std::char_traits<char>
Z = std::allocator<char>

std是STL的 namespace
显然这个是在调用 basic_string<X,Y,Z >的构造函数

这里
Y,Z是X确定定后basic_string的默认模版参数,
所以实际就是
basic_string<char>

这个正是 string

所以这里是调用
string("xx_kk")

  • 标 题:答复
  • 作 者:书呆彭
  • 时 间:2009-06-10 21:38

iicup已经解释得很清楚了。

我再多几句嘴,如果你不习惯C++的STL编程方式,别人用某个例子就事论事地讲,你也很难明白。“逆向”的的前提,至少是知道“正向”是如何工作的吧。

简单(但不严格)地说,std::basic_string<char>就是STL提供的的字符串,即std::string

而std::basic_string<char,std::char_traits<char>,std::allocator<char> >就是std::basic_string<char>的缺省模板参数展开形式。

std::basic_string<char,std::char_traits<char>,std::allocator<char> >::data写成简单的形式就是std::string::data

msvcp80.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >这个函数其实就是字符串的构造函数,可以理解为:std::string::string(const char *)


如果要深究string类中的data成员为何物,就需要研究STL源码了。可以去看侯俊杰《STL源码分析》。