C++ C++;关于从类型a转换到类型b和实例化/构造类型b之间的区别,标准是什么?
可能重复:C++ C++;关于从类型a转换到类型b和实例化/构造类型b之间的区别,标准是什么?,c++,casting,constructor,C++,Casting,Constructor,可能重复: 如果您有一个接受类型为b的参数的函数,但在调用站点,您只有一个类型为a的变量。将函数参数从a转换为b与构造类型b之间是否存在差异 我感兴趣的具体示例是,没有用户定义的cast运算符,但有一个单参数构造函数 例如: 功能定义: void DoWork(const B &arg1); 在我的具体示例中,类型a是const char* 呼叫地点: DoWork((B)"Hello"); vs B类定义 class B { public: B() : m_szValue
如果您有一个接受类型为b的参数的函数,但在调用站点,您只有一个类型为a的变量。将函数参数从a转换为b与构造类型b之间是否存在差异 我感兴趣的具体示例是,没有用户定义的cast运算符,但有一个单参数构造函数 例如: 功能定义:
void DoWork(const B &arg1);
在我的具体示例中,类型a是const char*
呼叫地点:
DoWork((B)"Hello");
vs
B类定义
class B
{
public:
B() : m_szValue(){}
B(const char *szValue) { strcpy (m_szValue, szValue); }
private:
char m_szValue[MAX_VALUE_LEN + 1];
};
编写C风格的演员表
(T)x
,其中x
属于U
类型,或多或少会按顺序尝试以下操作:
T
和U
属于类类型,请查找转换运算符U::operator T()const
或单参数构造函数T::T(U)
T
和U
是基本类型,则应用标准值转换(int到double等)重新解释演员阵容(x)
[更正/澄清:]在
T(x)
和(T)x
[/]之间没有区别,你甚至可以说DoWork(“你好”)代码>由于单参数构造函数提供的隐式转换。(不要允许这种偷偷摸摸的行为,声明构造函数explicit
,这对于单参数构造函数来说通常是个好主意。)注意这个问题是多么的清晰。这是误导性的/错误的:事实上,C样式转换和函数样式转换之间没有任何区别(语法除外)。它们在各方面都是相同的;不仅在OP的代码中,而且在任何地方。@Konrad:Hm。。。但这其中哪一方面是错误的?C型造型达到了所列结构中任何一种的效果,不是吗?要点是它包含了各种转换和重新解释,你可以用C++结构来明确控制。@你的答案强烈地暗示了<代码> t(x)< />有时有不同于(t)x<代码>的含义。至少我会这样理解你的答案。你明确地说“在你的代码中没有区别”(强调我的),虽然这是真的,但这也是一个不相关的细节。没什么区别,句号。@Konrad:我明白了,说得好,让我改写一下。@Konrad:现在看看,我希望这更准确些!
class B
{
public:
B() : m_szValue(){}
B(const char *szValue) { strcpy (m_szValue, szValue); }
private:
char m_szValue[MAX_VALUE_LEN + 1];
};