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)
其中一个比另一个好吗?有没有其他方法可以解决这个问题?
这是模糊的,因为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),并且通过提供精确匹配,您可以避免任何歧义.