显式关键字应用于运算符而不是构造函数

che*_*ldi 6 c++ explicit operator-keyword c++11

在下面的课程中,

你为什么要做运营商explicit?我认为这explicit是为了防止对构造函数的隐式调用?

 class Content
            {
public:

 virtual ~Content() = 0;
 virtual explicit operator float&();
 virtual explicit operator long long&();
 virtual explicit operator std::string&()
}
Run Code Online (Sandbox Code Playgroud)

小智 1

如果您希望一个Content对象永远不会隐式转换为(例如)a,则可以使用它float。这可能通过以下方式发生:

 void f( float f );
 ....
 Content c;
 f( c );      // conversion from Content to float
Run Code Online (Sandbox Code Playgroud)

如果没有explicit限定符,转换会隐式发生;有了它,你会得到一个编译错误。

静默、隐式转换可能是许多混乱和/或错误的根源,因此通常最好使运算符显式化,或者最好提供命名函数,例如 ,ToFloat它告诉读者到底发生了什么。