函数/方法重载C:数据类型混淆?

前端之家收集整理的这篇文章主要介绍了函数/方法重载C:数据类型混淆?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在C中有一些麻烦重载方法.
作为一个问题的例子,我有一个类,其中有多个方法被重载,每个方法都有一个具有不同数据类型的参数.
我的问题:这些方法应该出现在类中的特定顺序,以确保根据其参数数据类型调用正确的方法
class SomeClass{
    public:
    ...
    void Method(bool paramater);
    void Method(std::string paramater);
    void Method(uint64_t paramater);
    void Method(int64_t paramater);
    void Method(uint8_t paramater);
    void Method(int8_t paramater);
    void Method(float paramater);
    void Method(double paramater);
    void Method(ClassXYZ paramater);
}

我注意到有问题,因为运行时:

Method("string");

它正在呼唤:

Method(bool paramater);

解决方法

订单没有区别.通过分析参数的类型并将它们与参数的类型进行匹配来选择调用方法.如果没有完全匹配,则选择最佳匹配方法.在你的情况下,恰好是布尔方法.

您提供的类型为const char [7]的参数.根据C超载规则,这里的最佳路径是让const char [7]衰减到const char *,然后使用标准转换将其转换为bool.转换为std :: string的路径被认为更糟,因为它将涉及从const char *到std :: string的用户定义转换.通常,用户定义的转换会失去对标准转换的过载解决过程.这也是你的情况发生了.

如果您需要在这里调用std :: string版本,请为const char * type提供一个显式重载,并通过将参数转换为std :: string类型明确地委派给std :: string版本的调用

void Method(const char *paramater /* sic! */)
{
  Method(std::string(paramater));
}

猜你在找的C&C++相关文章