Std::pair/ostringstream 构造函数语法
Std::pair/ostringstream ctor syntax
为什么下面的代码...
#include <iostream>
#include <sstream>
#include <utility>
int main()
{
std::pair<std::string, std::string> pair1((std::ostringstream().flush() << "hello").str(), (std::ostringstream().flush() << "world").str());
return 0;
}
...生成编译器错误...
>g++ main.cpp
main.cpp: In function ‘int main()’:
main.cpp:7: error: ‘struct std::basic_ostream<char, std::char_traits<char> >’ has no member named ‘str’
main.cpp:7: error: ‘struct std::basic_ostream<char, std::char_traits<char> >’ has no member named ‘str’
...而下面的代码不会产生任何编译器错误?
#include <iostream>
#include <sstream>
#include <utility>
int main()
{
std::ostringstream oss1;
std::ostringstream oss2;
oss1 << "hello";
oss2 << "world";
std::pair<std::string, std::string> pair1(oss1.str(), oss2.str());
return 0;
}
如果有人可以建议如何操作,我最想完成 "one-line" 创建和填充我的 std::pair,就像我在第一个代码块中尝试做的那样。谢谢。
operator<<
function you're using to write the string literals takes a basic_ostream&
and returns a basic_ostream&
. But str
是 basic_ostringstream
的成员,因此您不能在 basic_ostream&
上调用它。
您可以转换 return 值,您的代码将编译
static_cast<std::ostringstream&>(std::ostringstream().flush() << "hello")).str()
此外,由于 flush
使用默认构造的 stringstream
毫无意义,您应该摆脱它。
为什么下面的代码...
#include <iostream>
#include <sstream>
#include <utility>
int main()
{
std::pair<std::string, std::string> pair1((std::ostringstream().flush() << "hello").str(), (std::ostringstream().flush() << "world").str());
return 0;
}
...生成编译器错误...
>g++ main.cpp
main.cpp: In function ‘int main()’:
main.cpp:7: error: ‘struct std::basic_ostream<char, std::char_traits<char> >’ has no member named ‘str’
main.cpp:7: error: ‘struct std::basic_ostream<char, std::char_traits<char> >’ has no member named ‘str’
...而下面的代码不会产生任何编译器错误?
#include <iostream>
#include <sstream>
#include <utility>
int main()
{
std::ostringstream oss1;
std::ostringstream oss2;
oss1 << "hello";
oss2 << "world";
std::pair<std::string, std::string> pair1(oss1.str(), oss2.str());
return 0;
}
如果有人可以建议如何操作,我最想完成 "one-line" 创建和填充我的 std::pair,就像我在第一个代码块中尝试做的那样。谢谢。
operator<<
function you're using to write the string literals takes a basic_ostream&
and returns a basic_ostream&
. But str
是 basic_ostringstream
的成员,因此您不能在 basic_ostream&
上调用它。
您可以转换 return 值,您的代码将编译
static_cast<std::ostringstream&>(std::ostringstream().flush() << "hello")).str()
此外,由于 flush
使用默认构造的 stringstream
毫无意义,您应该摆脱它。