C++ 类运算符自类型转换

标签 c++

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

例如

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

int main()
{
  MyClass obj;
  int Somevar;
  obj=(MyClass)Somevar; // class typecast
}

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

最佳答案

只需添加一个接受一个参数的构造函数:

class MyClass {
    explicit MyClass(int x) { … }
};

称为:

MyClass x = static_cast<MyClass>(10); // or
MyClass y = MyClass(10); // or even
MyClass z(10);

这允许在您的示例中进行显式 转换。 (也支持 C 风格的转换语法,但我不会在这里展示它,因为你不应该永远使用 C 风格的转换。它们是邪恶的和不必要的。)

有时(但非常很少),隐式转换更合适(例如,将 char* 转换为 std::string作业)。在这种情况下,删除构造函数前面的 explicit 限定符:

class MyClass {
   MyClass(int x) { … }
};

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

MyClass a = 10;

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

关于C++ 类运算符自类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717537/

相关文章:

c++ - const 的未定义行为

c++ - SQLite - 转换表数组?

c++ - win32(全屏)无边框窗口重叠任务栏

c++ - 使用上一次调用的结果递归调用每个元组成员

c++ - std::condition_variable 是线程安全的吗?

c++ - AVX2是最有效的基于 mask 包装的方法吗?

c++ - 从 std::map 获取所有符合条件的条目?

C++ Irrlicht 程序不链接 : "undefined reference to ` __imp_createDevice'"

c# - 在 native C++ 项目中导入 C# dll 库

c++ - 推回 vector 指针时如何解决读取访问冲突