какая разница в двух кодах:
char buf[2048];
stringstream in(string(buf));
int tmpInt;
while ((in >> tmpInt)) { // wrong, error C2296: '>>' : illegal, left operand has type 'std::stringstream (__cdecl *)(std::string)'
}
а также
char buf[2048];
string tmpStr(buf);
stringstream in(tmpStr);
while ((in >> tmpInt)) { // right
}
Я думаю, что они делают то же самое: оба используют строку для построения объекта stringstream. Независимо от временного объекта или реального объекта, мы будем называть конструктор строковых копий в stringstream (просто скопируйте содержимое buf)
IDE: vs2010
Итак, какая разница между этими двумя способами? или строковые методы реализации.
Благодарю.
Крис дал ответ. Код эквивалентен следующему:
stringstream in(string buf);
В C++ люди называют это самым неприятным анализом.
Компилятор видит это как объявление функции. in
- это функция, которая возвращает stringstream и принимает string
в качестве аргумента. Обратите внимание, что ваш компилятор сообщает об этом в сообщении об ошибке std::stringstream (__cdecl *)(std::string)
.
Вам понадобится дополнительный набор круглых скобок или синтаксис синтаксиса C++ 11, чтобы сообщить компилятору, что это не функция, которую вы объявляете:
stringstream in((string(buf)));
stringstream in{string(buf)};