gpt4 book ai didi

c++ - Std::pair/ostringstream 构造函数语法

转载 作者:太空狗 更新时间:2023-10-29 23:00:04 26 4
gpt4 key购买 nike

为什么下面的代码...

#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;
}

如果有人可以建议如何操作,我理想情况下会像我在第一个代码块中尝试做的那样,完成我的 std::pair 的“单行”创建和填充。谢谢。

最佳答案

operator<< 您用来编写字符串文字的函数采用 basic_ostream&并返回 basic_ostream& .但是 str basic_ostringstream 的成员, 所以你不能在 basic_ostream& 上调用它.

你可以转换返回值,你的代码会编译

static_cast<std::ostringstream&>(std::ostringstream().flush() << "hello")).str()

此外,由于 flush正在默认构造 stringstream毫无意义,你应该摆脱它。

关于c++ - Std::pair/ostringstream 构造函数语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34802532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com