我想在一个函数中使用 istringstream
,我希望 istringstream
由按值传递的 string
初始化。我可以避免函数体中显式的 istringstream iss_input(string_input);
吗?
void f(istringstream command){
}
int main(){
f( string("create_customer 1 Ben Finegold") );
}
上面演示了我想要实现的目标,但它不起作用。我正在解决的问题是command parsing .
最佳答案
我只使用 std::string
作为参数。但是如果你想传递一个std::istringstream
,那么你需要将它明确地传递给f
,作为std::istringstream
构造函数需要一个 std::string
is marked explicit (#2) .示例:
f(std::istringstream{"create_customer 1 Ben Finegold"});
上面的代码构造了一个临时的std::istringstream
作为参数,然后将其移入函数的参数command
;它使用来自 here 的移动构造函数#3 .
请注意,我们不需要笨重的东西
f(std::istringstream{std::string{"create_customer 1 Ben Finegold"}});
因为 std::string
的 const char*
构造函数 is not explicit (#5) , 并且编译器最多可以执行一个用户定义的隐式转换。因此,在我发布的第一行代码中,字符串文字 "create_customer 1 Ben Finegold"
被转换为 std::string
,然后用于显式构造临时 std::istringstream
参数,然后移入 command
。
关于c++ - 将字符串传递给函数的 istringsream 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33978249/