当我尝试使用第一种形式声明iss时,g++会报错:"error: no match for 'operator>>' in 'iss >> s'"。但是这两种不同的声明方式不是做同样的事情吗?
#include <iostream>
#include <sstream>
#include <string>
int main() {
const char *buf = "hello world";
std::string ss(buf);
//std::istringstream iss(std::string(buf)); // this doesn't work
std::istringstream iss(ss); // but this does
std::string s;
iss >> s;
}
iss
的函数,该函数接受一个std::string
并返回一个std::istringstream
(参数名称周围的括号是可选的)。由于强制类型转换不能出现在声明函数参数中,因此这必须明确是对接受std::string
(istringstream
的构造函数)的某个东西的调用。 - UncleBens