我试图通过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
的类型:
expr
中的引用(如果有)(即x
,cx
和rx
)expr
和paramType
现在,cx
是const int
:
cx - &gt; const int
paramType - &gt;引用const int
因此,根据提到的逻辑,由于模式匹配(而不仅仅是T
),const int
不应该是int
?我了解const
的{{1}}已被转移到cx
,但他说的是错的?他提到的这两步程序是不是遵循经验法则?你是怎么做到的?
谢谢!
答案 0 :(得分:3)
在his book中,Scott使用了这个&#34;符号&#34;:
template<typename T>
void f(ParamType param); // where `ParamType` depends on T
因此,当ParamType
为param
时,让const int
进行模式匹配。我们有:
const T & <----> const int // <----> is symbolic notation for pattern matching
因此T
推断为int
,因此ParamType
为const int&
。
答案 1 :(得分:1)
当cx
为const int
时,T
推断为int
,以便const T& param
为const int& param
,即param
属于const int&
类型。