我有一个以 null 结尾的字符串存储在stypechar*中。我想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));
除了原始的,所有这些都有效。有人可以解释这里到底发生了什么吗?谢谢。