0

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

如果我错了请纠正我

问:至少解释三件可能出错的事情

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. < 运算符未定义,因此我们无法将两个对象与 < 运算符进行比较

  2. A 和 B 的类型可以不同,并且没有为此定义 < 运算符

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

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

  5. 未定义 A 和 B 的复制构造函数。因此,我们只是返回浅拷贝的。既然是浅拷贝,那么浅拷贝是可以改变的,原本应该不变的拷贝也可以改变。

谢谢,

4

1 回答 1

0

< 运算符未定义,因此我们无法将两个对象与 < 运算符进行比较
A 和 B 的类型可以不同,并且未为此定义 < 运算符

这是不相关的,因为即使两种类型相同,它们仍然可能没有 operator<。

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

即使C相同,仍然会有常数损失。

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

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

未定义 A 和 B 的复制构造函数。因此,我们只是返回浅拷贝的。既然是浅拷贝,那么浅拷贝是可以改变的,原本应该不变的拷贝也可以改变。

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

于 2013-04-27T09:34:45.053 回答