Ss的含义是什么?

时间:2014-12-22 00:45:01

标签: c++ type-conversion reinterpret-cast delete-operator

我已将磁盘文件读入内存到声明为:

的数组中
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。这是什么意思?

2 个答案:

答案 0 :(得分:7)

根据{{​​3}},

Ssstd::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> >

答案 1 :(得分:1)

这一行:

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

真的应该是:

std::string strbuf(buffer, length);

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