推断类型

时间:2017-03-27 22:21:55

标签: c++ c++11 effective-c++

我试图通过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 - &gt; const int

         

    paramType - &gt;引用const int

    因此,根据提到的逻辑,由于模式匹配(而不仅仅是T),const int不应该是int?我了解const的{​​{1}}已被转移到cx,但他说的是错的?他提到的这两步程序是不是遵循经验法则?你是怎么做到的?

    谢谢!

2 个答案:

答案 0 :(得分:3)

his book中,Scott使用了这个&#34;符号&#34;:

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

因此,当ParamTypeparam时,让const int进行模式匹配。我们有:

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

因此T推断为int,因此ParamTypeconst int&

答案 1 :(得分:1)

cxconst int时,T推断为int,以便const T& paramconst int& param,即param属于const int&类型。