模糊调用重载函数

Mar*_*ndl 7 c++ overloading static-cast

我有两个功能:

void DoSomething( const tchar* apsValue )
void DoSomething( size_t aiValue )
Run Code Online (Sandbox Code Playgroud)

现在我想传递'0'作为size_t:

DoSomething(0);
Run Code Online (Sandbox Code Playgroud)

编译器抛出一个错误:"对重载函数的模糊调用"

要解决这个问题,我可以使用static_cast,例如:

DoSomething(static_cast<size_t>(0));
Run Code Online (Sandbox Code Playgroud)

或者简单:

DoSomething(size_t(0));
Run Code Online (Sandbox Code Playgroud)

其中一个比另一个好吗?有没有其他方法可以解决这个问题?

Jam*_*nze 6

这是模糊的,因为0有类型int,而不是size_t.它可以转换为任何一个size_t或指针,所以如果你有两者的重载,它是不明确的.一般来说,我建议如果你有重载函数,其中一个可以采用整数类型,你可以添加一个重载int,可能是:

inline void DoSomething( int aiValue )
{
    DoSomething( static_cast<size_t>( aiValue ) );
}
Run Code Online (Sandbox Code Playgroud)

积分文字int默认具有类型(除非它们太大而不适合int),并且通过提供精确匹配,您可以避免任何歧义.