c ++类运算符自我类型转换

AUT*_*UTO 1 c++

如何在类中创建一个运算符函数,用于将其他类型作为该类的对象进行类型转换?

例如

class MyClass
{
  // ...
    // operator ??
  // ...
}

int main()
{
  MyClass obj;
  int Somevar;
  obj=(MyClass)Somevar; // class typecast
}
Run Code Online (Sandbox Code Playgroud)

一般来说,是否有一个运算符允许这种类型转换的语法准确?

Kon*_*lph 7

只需添加一个带有一个参数的构造函数:

class MyClass {
    explicit MyClass(int x) { … }
};
Run Code Online (Sandbox Code Playgroud)

称为:

MyClass x = static_cast<MyClass>(10); // or
MyClass y = MyClass(10); // or even
MyClass z(10);
Run Code Online (Sandbox Code Playgroud)

这允许在您的示例中进行显式转换.(C风格的转换语法也支持,但我不会在这里表现出来,因为你应该从来没有使用C-风格的转换.他们是邪恶的和不必要的.)

有时(但罕见),隐式转换是比较合适的(例如,从转换char*std::string的作业).在这种情况下,删除explicit构造函数前面的限定符:

class MyClass {
   MyClass(int x) { … }
};
Run Code Online (Sandbox Code Playgroud)

现在可以进行隐式转换int:

MyClass a = 10;
Run Code Online (Sandbox Code Playgroud)

但是,这通常不是一个好主意,因为隐式转换不直观且容易出错,因此您通常应将构造函数标记为explicit.