转换函数/运算符,静态解析函数或转换构造函数?

时间:2015-11-26 23:19:59

标签: c++ parsing constructor type-conversion

我想知道转换方法之间是否存在差异,如果一个方法优于另一个方法。

假设有class Aclass Bclass B可以转换为class A。比方说,class A表示字符串,class B表示整数。

您可以通过多种方式从class A对象获取class B个对象:

  • operator A() class B中的函数允许隐式转换
  • explicit operator A()class B中执行以允许显式转换
  • A toA()功能class B,以便有效地转换它
  • static A parse(B) class A中的功能将其转换为
  • A(B) class A中的构造函数来创建新对象

有没有转换对象的首选方法?应该实施多种方式?应该避免吗?或者它是否都是基于背景的,是否应该由最佳判断决定?

1 个答案:

答案 0 :(得分:0)

自从我发布这个问题以来已经有一段时间了,从那以后我已经制定了一些我试图在我的项目中坚持的指导方针,我想我会分享它们以及其他人偶然发现这个问题也可以从中受益。

我也欢迎对这些指南的缺点提出任何意见,因为它们可能并不完美。

  1. 对象应该只为以某种方式与该类直接相关的对象提供隐式转换构造函数。例如,一个字符串类,它提供一个接受char数组的构造函数。当转换有损或类不相关时,请使用显式转换构造函数。

  2. 对象应该只向与其直接相关的对象提供隐式转换运算符,对于无损转换(无信息丢失)。同样,字符串可以提供到字符数组的转换。如果不是这种情况,则应使用显式转换运算符。

  3. 为所有转换运算符(隐式和显式)提供toX()函数。这不是一个严格的准则,但更多的个人偏好。在我看来,有时最好在代码中写入X(),因为它会更好地传达你的意图。

  4. 如果函数由于某种原因必须是静态的,则只使用解析(X)函数。

  5. 自由函数可以用作解析(X)函数的替代,这取决于个人偏好。

  6. 正如我所说,我欢迎任何意见,我希望这可以帮助某人。