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它告诉读者到底发生了什么。