2010-06-15 70 views

回答

13

这是一个演员。任何定义此类型的类都可以在需要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!". 

演员运营商几乎总是一个坏主意,因为总是为更好的方法来达到同样的效果。在上述情况下,您最好定义operator<<(std::ostream&, const Foo&)

+9

我反对术语“永远”,它太绝对了。我认为“通常”会是一个更好的术语。 – 2010-06-15 13:26:57

+1

马丁,我没有说“永远”。我几乎总是说“这不是绝对的”,而且IMO比“通常”更接近真相。 – 2010-06-16 01:48:16

+10

Loki,你自己的评论太绝对了。应该总是避免使用术语“总是”,还是应该避免使用术语“总是”? – Alyoshak 2012-07-25 01:18:31

20

它是一个conversion operator,它允许对象显式或隐式地转换为std :: string。当发生这样的转换时,调用操作符并且转换的结果是调用的结果。

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

相关问题