可能重复:
What is the difference between (type)value and type(value)?
如果你有一个带有b类型参数的函数,但是在调用站点你只有一个类型为a的变量。将函数参数从a转换为b和构造类型b之间是否存在差异。
我感兴趣的具体示例是没有用户定义的强制转换运算符,但是只有一个参数构造函数。
示例:
功能定义:
void DoWork(const B &arg1);
在我的具体示例中,类型a为const char *
致电网站:
DoWork((B)"Hello");
VS
DoWork(B("Hello"));
B类定义
class B
{
public:
B() : m_szValue(){}
B(const char *szValue) { strcpy (m_szValue, szValue); }
private:
char m_szValue[MAX_VALUE_LEN + 1];
};
答案 0 :(得分:3)
编写C样式广告(T)x
,其中x
类型为U
,或多或少按顺序尝试以下内容:
如果T
和U
属于班级类型,请查找转化运算符U::operator T() const
或单参数构造函数T::T(U)
。
如果T
和U
是基本类型,请应用标准值转换(int to double等)。
reinterpret_cast<T>(x)
。
请注意,您不得两者转换运算符和隐式转换构造,否则调用将不明确。
[更正/澄清:] T(x)
和(T)x
之间没有区别。[/]你甚至可以说DoWork("Hello");
因为< em>单参数构造函数提供的隐式转换。 (请禁止这种偷偷摸摸的行为,声明构造函数explicit
,这对于单参数构造函数来说通常是一个好主意。)