显式调用类的强制转换操作符方法比强制转换?

时间:2014-07-29 15:23:19

标签: c++ operator-overloading

如果一个类提供方法operator wchar_t*并且我在某种情况下使用此类的实例,则编译器无法自动推断出强制转换,是否认为显式调用强制转换操作符方法而不是实际执行投?

e.g:

x.doStuff(o.operator wchar_t*())

Vs的

x.doStuff(static_cast<wchar_t*>(o))

第一个选项是错误/错误,还是调用操作符方法是否可以接受?

4 个答案:

答案 0 :(得分:2)

至少它是不寻常的...特别是因为第二个结构是非常惯用的。即使使用普通的强制转换运算符也应该更好。

答案 1 :(得分:2)

我肯定会使用C ++标准函数。 它们更安全,其中一些,如static_cast或dynamic_cast允许测试演员是否成功。

答案 2 :(得分:1)

static_cast< T >( x )优于C风格(T)x的最大优势之一是 grepable 。您可以搜索以查找完成static_cast的代码中的位置,它包含确实静态强制转换的信息预期(与动态演员,常规演员或重新演绎演员相对)。

它还具有明确调用强制转换操作符的所有这些优点。

答案 3 :(得分:1)

我认为如果static_cast做你想要的,那么你应该更喜欢使用它。如果没有,那么使用显式强制转换运算符应该是可以接受的。我建议对此案进行评论。