我有一个以 null 结尾的字符串存储在s
typechar*
中。我想istringstream
从s
. 由于 的构造函数istringstream
需要一个类型的参数string
,我需要从s
转换char*
为string
。我通过以下方式使用其构造函数创建一个匿名string
对象来做到这一点:s
istringstream strin(string(s));
使用 gcc (4.7.3) 编译时这似乎没问题。但是,在我添加以下代码后使用strin
int r;
strin >> r;
我得到了编译错误:
error: invalid operands of types 'std::istringstream(std::string*) {aka std::basic_istringstream<char>(std::basic_string<char>*)}' and 'int' to binary 'operator>>'
这对我来说似乎很奇怪,因为我不明白类型std::istringstream(std::string*)
是什么。不strin
应该是 typestd::istringstream
吗?
通过使用以下代码的修改版本之一,我可以让编译器满意。
解决方案1:传递一个命名string
对象
string str(s);
istringstream strin(str);
解决方案2:直接 pass s
,好像会被隐式转换为string
istringstream strin(s);
解决方案3:显式转换s
为string
istringstream strin((string)(s));
解决方案4:添加一对神奇的括号
istringstream strin((string(s)));
解决方案5:告诉编译器s
确实是一个char*
类型
istringstream strin(string((char*)s));
除了原始的,所有这些都有效。有人可以解释这里到底发生了什么吗?谢谢。