gpt4 book ai didi

c++ - 通过boost::lexical_cast添加类型进行转换(segfault)

转载 作者:行者123 更新时间:2023-12-02 10:12:00 25 4
gpt4 key购买 nike

我想使用boost::lexical_cast在字符串表示和实际数据之间来回转换我的类型。这就是我想要做的:

#include <iostream>
#include <boost/lexical_cast.hpp>
#include <string>

struct Foo
{
Foo() = default;

Foo(const std::string& str)
: str(str)
{
}

friend std::istream& operator>>(std::istream& is, Foo& foo);
friend std::ostream& operator<<(std::ostream& os, const Foo& foo);

private:
std::string str;
};

// For conversion to Foo.
std::istream& operator>>(std::istream& is, Foo& foo)
{
return is >> foo.str;
}

// For conversion from Foo.
std::ostream& operator<<(std::ostream& os, const Foo& foo)
{
return os << foo.str;
}

int main()
{
boost::lexical_cast<Foo>("ok");
boost::lexical_cast<std::string>(Foo("ok"));
}
但这会导致段错误。为什么?

[文档](https://www.boost.org/doc/libs/1_73_0/doc/html/boost_lexical_cast.html)

最佳答案

听起来崩溃是由于堆栈溢出引起的。我认为您的operator>>通过隐式将foo.str转换回Foo来调用自己。
尝试通过使构造函数显式删除隐式转换:

explicit Foo(const std::string& str) noexcept
: str(str)
{
}

关于c++ - 通过boost::lexical_cast添加类型进行转换(segfault),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63181831/

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