gpt4 book ai didi

string - to_string 与强制转换为字符串和运算符<<

转载 作者:行者123 更新时间:2023-12-03 16:54:26 28 4
gpt4 key购买 nike

我想知道为我自己的类实现字符串转换的最佳方法是什么。我进行了广泛的搜索(并查阅了一些书籍),但令人惊讶的是我没有在任何地方找到任何建议。在我看来,选项是:

转换为字符串的内部类定义:operator std::string() const
类外重载std::string to_string(const Obj&)
与此相关:声明流操作符的重载是否更好<<课内还是课外?

最佳答案

我会说这取决于您尝试生成的字符串类型。如果是用于日志记录和调试,我可能会重载 <<(ostream&) ,前提是我的日志库支持流(或者可以是支持它的模式)。

如果它作为一个字符串有意义而不会让任何人感到惊讶(即将推出的 string_view 就是一个例子),那么我会做这个操作符。如果它是一个数字类型(比如一个大整数),或者由于任何其他原因需要有一个字符串表示的任何其他类型,我会添加一个 ToString()函数,无论是否为成员。

但是,我不会添加 std::to_string()重载,因为我不想潜入 std使用我自己的非标准代码命名空间。此外,您甚至不能使用 ADL 上下文,因为 std::to_string()只接受原始操作数。

至于<<(ostream&)运算符,将其声明为成员函数是没有用的,因为 os << myObj行不通。您可以做的是将其声明为友元,然后在类声明中对其进行定义。然而,这将使它成为一个非成员函数,因为 friend关键词。通常,最安全的做法是将其声明为友元并在源文件中提供实现。

关于string - to_string 与强制转换为字符串和运算符<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34397445/

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