stack <char> stck;
string str;
stck.push('0');
str.append("test:");
//test:
cout << str << endl;
str.append(&stck.top());
//test:0═══════════════¤¤¤¤▌▌▌▌,╘╥XЕ┤
cout << str << endl;
为什么会这样?
答案 0 :(得分:3)
Maciej Hehl关于为什么你得到了不受欢迎的行为是正确的。
要获得所需的行为,您需要附加字符本身,而不是指向它的指针。你说(在你对Kalim的答案的评论中)没有覆盖只需要std::string::append
的{{1}},这是正确的。但是,有一个覆盖char
,它将字符(第二个参数)追加一定次数(第一个参数)。
所以写出你想要的东西的正确方法是:
std::string::append(std::size_t, char)
或者,只需对str.append(1, stck.top()); // Append one copy of the character at the top of the stack
运算符使用重载,该运算符接受+=
:
char
答案 1 :(得分:2)
&stck.top()
是位于堆栈顶部的char
的地址。此表达式的类型为char*
。
append
方法的重载,取char*
(实际上签名为string& append ( const char* s );
)要求指针指向以空字符结尾的字符串的开头并解释参数这条路。它追加参数指向的字符,然后追加内存中的所有连续字符,直到第一个空字符。它读取并复制不属于堆栈的内存区域。