Почему следующий код ...Std :: пара/ostringstream т е р синтаксис
#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;
}
Если кто-нибудь может посоветовать, как я бы в идеале хотелось стащить «один-линии» создание и население моего станд :: пары, как я пытаюсь сделать в первом блоке кода. Спасибо.
спасибо. Ваш ответ, тем не менее, вызывает у меня озабоченность по поводу того, что базовый_поток базового_потока для базового_строчного потока. Это считается безопасным, потому что basic_ostream &, возвращаемый оператором <<, на самом деле является тем же самым rvalue ostringstream, по которому он вызывается? – StoneThrow
@StoneThrow Возвращенный 'ostream &' относится к экземпляру базового класса созданного вами экземпляра 'ostringstream', поэтому абсолютно безопасно вернуть его обратно к исходному типу. – Praetorian