推导类型

Deducing the types

我在阅读 Scott Meyer 的 Effective Modern C++ 时试图理解类型推导。

考虑下面的代码片段:

template<typename T>
void f(const T& param); // param is now a ref-to-const; paramType is const T&

int x = 27; // as before
const int cx = x; // as before
const int& rx = x; // as before

f(x); // T is int, param's type is const int&
f(cx); // T is int, param's type is const int&
f(rx); // T is int, param's type is const int&

他说由于paramType是一个引用,我们可以按照两步程序推导出T的类型:

  1. 忽略 expr 中的引用(如果有)(即 xcxrx
  2. 模式匹配 exprparamType
  3. 的类型

现在 cxconst int:

cx -> const int

paramType -> reference to const int

那么,根据提到的逻辑,由于模式匹配(而不仅仅是 int),T 不应该是 const int 吗?我知道 cxconstness 已经传递给 paramType,但是他说的是错的吗?他提到的这个两步程序是否不能作为经验法则遵循?你是怎么做到的?

谢谢!

cxconst int时,则T推导为int,使const T& paramconst int& param,即param 的类型是 const int&.

his book 斯科特使用这个 "notation":

template<typename T>
void f(ParamType param); // where `ParamType` depends on T

所以当 paramconst int 时,让我们为 ParamType 做模式匹配。我们有:

const T & <----> const int // <----> is symbolic notation for pattern matching

所以T推导为int,因此ParamTypeconst int&