operator std :: string()const?

Joh*_*nny 28 c++ operator-keyword

有人可以告诉我究竟是什么

operator std::string()
Run Code Online (Sandbox Code Playgroud)

代表?

Mic*_*yan 25

它是一个转换运算符,允许将对象显式或隐式地转换为std :: string.当发生这样的强制转换时,将调用运算符,并且强制转换的结果是调用的结果.

作为隐式转换的一个例子,假设你有接受类型的函数std::stringconst std::string&,但不是给定对象类型.将对象传递给该函数将导致调用转换运算符,并将结果传递给函数而不是类型.

  • 您的链接已损坏。 (2认同)

Mar*_*tos 16

它是一个演员.任何定义此类型的类都可以在任何std::string需要的地方使用.例如,

class Foo {
public:
    operator std::string() const { return "I am a foo!"; }
};
...
Foo foo;
std::cout << foo; // Will print "I am a foo!".
Run Code Online (Sandbox Code Playgroud)

演员操作员几乎总是一个坏主意,因为总会有更好的方法来实现相同的结果.在上面的例子中,你最好定义operator<<(std::ostream&, const Foo&).

  • Loki,你自己的评论太绝对了.如果一个*总是*避免使用"总是"这个词,或者一个*通常*应该避免使用"总是"这个词吗? (10认同)
  • 我反对"永远"这个词,它太绝对了.我认为"通常"会是一个更好的术语. (9认同)
  • 事情变得越来越矛盾 (3认同)
  • 不需要将 foo 类型转换为 (string)foo 吗? (3认同)
  • @poorva 你是对的,@MarceloCantos 你错了:在这种情况下,你确实需要将它显式转换为字符串,否则你会得到一个错误 `error: cannot bind 'std::ostream {aka std::basic_ostream&lt;char &gt;}' 左值到 'std::basic_ostream&lt;char&gt;&amp;&amp;` 原因是 `operator&lt;&lt;` 被定义为模板函数,所以你必须精确匹配它的参数,并且隐式转换是不相关的. (3认同)
  • 请注意,此答案中的代码 (`std::cout &lt;&lt; foo;`) 只是**不会编译**,因为正如@EranMarom 指出的,`operator&lt;&lt;` 是一个模板函数。我试过。编译器 (g++ 7.3, c++14) 说`错误:'operator&lt;&lt;' 不匹配(操作数类型是 'std::ostream {aka std::basic_ostream&lt;char&gt;}' 和 'Foo')`。 (2认同)