是否可以将字符串流作为函数参数传递?

时间:2012-05-31 12:00:46

标签: c++ function parameter-passing stringstream

是否可以传入一个字符串流并让函数直接写入它?

我记得我看到过一个类似于这样的函数:

my_func(ss << "text" << hex << 33);

4 个答案:

答案 0 :(得分:18)

当然可以。为什么不呢?此类函数的示例声明:

void my_func(std::ostringstream& ss);

答案 1 :(得分:9)

绝对!确保通过引用而不是按值传递它。

void my_func(ostream& stream) {
    stream << "Hello!";
}

答案 2 :(得分:3)

my_func必须有以下标志:

void my_func( std::ostream& s );

,因为那是ss << "text" << hex << 33的类型。如果目标是 要提取生成的字符串,你必须做类似的事情:

void
my_func( std::ostream& s )
{
    std::string data = dynamic_cast<std::ostringstream&>(s).str();
    //  ...
}

另请注意,您无法使用临时流;

my_func( std::ostringstream() << "text" << hex << 33 );

将无法编译(除非可能使用VC ++),因为它不是合法的C ++。您 可以这样写:

my_func( std::ostringstream().flush() << "text" << hex << 33 );

如果你想使用临时的。但那不是用户友好。

答案 3 :(得分:1)

是的,是

Function(expresion)

将首先评估表达式,并将其结果作为参数传递

注意:Operator << for ostreams会返回ostream