Ss 类型是什么意思

What does the type Ss mean?

本文关键字:意思 是什么 类型 Ss      更新时间:2023-10-16

我已经将磁盘文件读入内存中,该数组声明如下:

char * buffer = new char [length];

然后重新解释数组:

std::string strbuf(reinterpret_cast<const char *>(buffer), length);

并立即检查提供的字符串的类型。

cout << "buffer is: " << typeid(buffer).name() << 'n';
cout << "strbuf is: " << typeid(strbuf).name() << 'n';
buffer is: Pc
strbuf is: Ss */

如您所读,字符串"strbuf"的类型为 Ss。那是什么意思?

Ss是根据安腾ABI重整规则对std::basic_string<char, std::char_traits<char>, std::allocator<char>>的破坏名称。

如果您在脑海中应用规则时遇到问题,可以使用c++filt工具:

$ c++filt <<< _ZSs
std::basic_string<char, std::char_traits<char>, std::allocator<char> >

这一行:

std::string strbuf(reinterpret_cast<const char *>(buffer), length);

这真的应该是:

std::string strbuf(buffer, length);

不将buffer解释为字符串。它复制它。 此时strbuf拥有自己的整个缓冲区副本。当你做delete [] buffer;时,strbuf仍然有自己的对象,并且仍然是一个完全有效的对象。由于string管理自己的内存,因此您也不需要显式删除它 - 您可以让它超出范围。