我寫了一個程序,其中有一個類。在這個類中,有一個超載的函數調用運算符,它需要一個對象和一個std::string
對象,並且有一個while
循環,我們無限期地輸入並連接到std::string
參數。爲什麼不是一個字符串的第一個輸入不被分配給std :: string對象?
問題是第一個輸入未被連接到std::string
參數中。雖然我解決了這個問題,但我無法理解爲什麼會發生這種情況。
這是完整的程序:
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
using namespace std;
class PrintString {
public:
void operator() (istream& is, string &ss) {
// string s; (1)
while (is >> ss) {
ss += ss;
}
if (is)
ss = "";
}
/*
* (1): I fixed this by defining another std::string object
* and using that to assign to ss. After I did this everything
* is working as I wanted it to be.
*/
};
int main() {
cout << "enter some words, press ctrl+d to quit\n";
vector<string> vec;
PrintString obj;
string s1;
s1.clear();
obj(cin,s1);
vec.push_back(s1);
for (const auto &elem: vec)
cout << elem;
return 0;
}
輸出是這樣的:
enter some words, press ctrl+d to quit
amsndjanjskndna. <- This is the first input
mnmn, <- This is the second input
mnmn,mnmn, <- But in the output the first input is not seen
在我的系統我使用的Xcode 6.0.1版本