C++ C++;复制构造函数和类型转换
感谢您的帮助,我总结了以下解决方案 如果我错了,请纠正我 至少解释三件可能出错的事情C++ C++;复制构造函数和类型转换,c++,templates,casting,type-conversion,copy-constructor,C++,Templates,Casting,Type Conversion,Copy Constructor,感谢您的帮助,我总结了以下解决方案 如果我错了,请纠正我 至少解释三件可能出错的事情 template<typename A, typename B, typename C> C mymin (const A& a, const B& b) { if ( a < b ) return (C) a; else return (C) b; } 模板 C mymin(施工A&A、施工B&B) { if(a
template<typename A, typename B, typename C>
C mymin (const A& a, const B& b)
{
if ( a < b )
return (C) a;
else
return (C) b;
}
模板
C mymin(施工A&A、施工B&B)
{
if(a
我的答案如下
请让我知道我是否得到了他们的权利
C
相同,也会有常数损失
不保证从A或B到C的类型转换,因为未定义转换构造函数
类型转换本身是有保证的,但如果类型不同,则会产生不可预测的结果
未定义A和B的复制构造函数。因此,我们只是返回一个肤浅的复制。因为它是一个浅拷贝,浅拷贝可以被改变,而原本应该是常量的拷贝也可以被改变
A
或B
不需要复制构造函数。唯一涉及的构造函数将是C
的复制构造函数,它将接受已经是C样式的castC
作为参数。x
和y
是否未声明?这段代码中有太多可能出错的地方,使得任何答案都没有意义。哦,对不起,我打错了。我纠正了。谢谢“G”类型的返回值也是打字错误吗?它是C.Soryy。我改正了。如果一些C++程序员来了,给你一个使用C样式的ChansSelp,怎么办?OTOH不,这将是正确的,而不是错误的。强制转换不会更改源对象,除非强制转换调用定义非常奇怪的操作符X
或转换构造函数。此外,constness的缺乏不会影响源对象,除非C
是引用类型(在有人“错误”使用结果引用之前,它仍然不会真正影响源对象)。@charlesbaily是的,它不会更改对象,因为它仅用于从cast提供的任何类型构造C
的副本,我同意在这种情况下,康斯特内斯的损失并不重要。我的意思是,不管A
是否与C
相同,常数损失仍然会发生。哦,谢谢,那么这个问题的答案是什么。这就是我所能想到的。但大多数都是错误的……@asd213sasd2254121除了C风格的演员阵容,没有上下文很难分辨。我会投票赞成两者兼得的可能性