【问题标题】:Is this equivalent to a std::string?这等效于 std::string 吗?
【发布时间】:2011-07-14 03:20:08
【问题描述】:

尝试在具有多个 std::string const & 参数的函数上追踪 LNK2019 Unresolved External Symbol 错误。

this answer 的第一步说要检查修饰/未修饰的名称,这就是我在参数列表中的链接器错误文本中看到的内容:

class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &

这也是std::string const &amp;吗?

感谢您的帮助。

我正在运行 VS 2008。

【问题讨论】:

  • 查看 'string' here: typedef basic_string&lt;char&gt; string 的 typedef 并注意 basic_string 模板的 TraitsAllocator 参数的默认值

标签: c++ string stl linker std


【解决方案1】:

是的。

作为 C++ 标准化的一部分,std::string 类与 STL 更加兼容。与 STL 容器一样,可以选择元素类型。常见的选择是charwchar_t,但Visual C++ 用户也可以使用TCHAR。与 STL 容器一样,内存分配由分配器处理。

但是,字符串与其他容器不同,因为某些方法需要对其元素执行更复杂的操作。 std::set&lt;T&gt; 只需要比较两个T 对象,但std::string 需要处理多字节编码等复杂情况。这些细节都包含在std::char_traits&lt;char&gt; 类中。

因此,由于所有这些复杂性,您最终会得到std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;。这当然不是很友好,大多数人只需要默认值。 std::string 是它的友好名称。

【讨论】:

  • 非常有帮助的 MSalters。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 2018-08-05
相关资源
最近更新 更多