-1

在这个例子中:

template <typename T>
inline T const& Max (T const& a, T const& b)  { 
    return a < b ? b : a; 
}

具体这部分:

...const& Max (T const& a, T const& b)...

我不明白它&是用来做什么的。我可以在没有 的情况下实现相同的功能&,它仍然可以工作。在这里获取地址有什么意义?

4

3 回答 3

3

我可以在没有 & 的情况下实现相同的功能,它仍然可以工作。

不,你不能。删除&符号,您将拥有一个非常不同的功能。这个新函数复制传递给它的参数并返回一个副本。使用 & 符号时,该函数不会进行复制。返回值是较大输入的别名。

这是另一个例子:去掉const参数和返回值的限定符。通过此更改,可以在分配的左侧使用该功能。没有&符号,您将无法做到这一点。

#include <iostream>

template <typename T>
inline T & Max (T & a, T & b)  {   
   return a < b ? b : a;  
}

int main () {
  int a = 1;
  int b = 2;

  Max(a,b) = 42; 

  std::cout << "a=" << a << " b=" << b << "\n";
}
于 2012-08-01T23:32:49.080 回答
0

在这种情况下 & 符号不是获取地址,而是创建引用变量。将引用视为始终取消引用的指针。这不是它的实际情况,但它是解释它的最简单方法。

于 2012-08-01T23:21:07.137 回答
0

其背后的思考过程基本上是,“我想通过引用传递(无论出于何种原因),当我这样做时,我想确保它在此过程中不会改变。我将修改带 const 的参数。”。

它是引用的事实意味着您没有将值复制到新范围(函数)中。相反,您指的是调用您的函数的范围内的原始版本。const 的原因只是为了保证值不会改变。

阅读http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/上的“通过 const 参考”部分

关于 const 使用的许多细节的更详尽解释: http ://en.wikipedia.org/wiki/Const-correctness

于 2012-08-01T23:27:13.437 回答