【发布时间】:2012-02-21 12:26:06
【问题描述】:
我有两个功能:
void DoSomething( const tchar* apsValue )
void DoSomething( size_t aiValue )
现在我想将 '0' 作为 size_t 传递:
DoSomething(0);
编译器抛出错误:“对重载函数的模糊调用”
为了解决这个问题,我可以使用 static_cast,例如:
DoSomething(static_cast<size_t>(0));
或者简单:
DoSomething(size_t(0));
其中一个比另一个更好吗?有没有其他方法可以解决这个问题?
【问题讨论】:
-
static_cast 在任何时候都比适用的 c-style cast 更好。
-
@iammilind size_t(0) 不是 c 风格的演员表。它构造了一个以 '0' 为值的新 size_t
-
@iammilind 为什么?
static_cast比 C 风格转换更可取,在这种转换可能存在 C 风格转换解析为什么类型的问题:指针或引用。否则......当你想要一个MyClass的临时实例时,你会写static_cast< MyClass >( 42 )或MyClass( 42 )吗? -
在这种特定情况下,您可能可以为 size_t 写
DoSomething(0u),但这不是类似情况的通用解决方案。 -
@JamesKanze,
...where it is applicable
标签: c++ overloading static-cast