答案 0 :(得分:0)
显示$ 1的奇怪消息
没有什么很奇怪。
实现一个对短字符串和长字符串都表现良好的std::string
类有点不重要,您正在查看实现的内部。
我只是想知道它的价值是什么
该值显然为lol
。
如果您对std::string
的内部不感兴趣,则应该使用print x.c_str()
代替print x
。
<强>更新强>
当我只打印x时,在gdb里面:为什么这样做而不仅仅是字符串的值。
GDB 确实只显示std::string
的值,恰好std::string
的内部状态很复杂。
是因为它不是原始类型。
是
你怎么知道你必须做x.cstr()等
因为我经常使用std::string
,并知道它提供了哪些方法。
假设我有一个向量,我只想要向量中的元素,我该怎么做?
您可以打印矢量元素:print v[0]
,print v[1]
等
std::vector
的某些实现提供了GDB漂亮的打印机,使这更容易。例如,在相当现代的Linux系统上,你会看到类似这样的东西:
(gdb) list
1 #include <vector>
2
3 int main()
4 {
5 std::vector<int> v{1,2,3,7,6,5,4};
6 return v.size();
7 }
(gdb) p v
$1 = std::vector of length 7, capacity 7 = {1, 2, 3, 7, 6, 5, 4}
如果您的实施没有提供这样漂亮的打印机,那么编写一个将是一个很好的学习练习。文档here。