C ++拷贝构造函数和类型转换

时间:2013-04-27 08:24:11

标签: c++ templates casting type-conversion copy-constructor

感谢您的帮助,我总结了以下解决方案

如果我错了,请纠正我

Q值。至少解释三件可能出错的事情

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;
}

我的答案如下。

如果我把它们弄好的话,请告诉我。

  1. &LT;运算符未定义,因此我们无法将这两个对象与&lt;操作

  2. A和B的类型可以不同,并且&lt;没有为

  3. 定义运算符
  4. 如果C的类型与A或B不同 ,进行类型转换,改变定义为常数的a或b

  5. 无法保证从A或B到C的类型转换 ,因为没有定义转换构造函数。

  6. 未定义A和B的复制构造函数。 因此,我们只是返回浅层复制的。 因为它是浅拷贝  ,浅拷贝可以改变  ,并且原本应该是常量的副本也可以改变。

  7. 谢谢,

1 个答案:

答案 0 :(得分:0)

  

&LT;运算符未定义,因此我们无法将这两个对象与&lt;运营商
  A和B的类型可以不同,并且&lt;没有为该

定义运算符

它是无关的,因为即使两种类型相同,仍然可能没有运算符&lt;对他们来说。

  

如果C的类型与A或B不同,则会发生类型转换,更改定义为常量的a或b

即使C相同,仍然会有常量丢失。

  

无法保证从A或B到C的类型转换,因为未定义转换构造函数。

类型转换本身是有保证的,但如果类型不同,则会产生不可预测的结果。

  

未定义A和B的复制构造函数。因此,我们只是返回浅层复制的。由于它是浅拷贝,因此可以改变浅拷贝,并且也可以改变应该是常数的原始拷贝。

AB不需要复制构造函数。所涉及的唯一构造函数是C的复制构造函数,它将接受已经C样式的转换C作为参数。