在以下示例中,我直截了当地期望拨打inc(iref)
来调用T=int&
的inc-function,因为这是iref
的类型。但是,似乎在将变量传递给函数时会删除&
,因此在T=int
和inc(i)
的情况下都会导致inc(iref)
。只有在明确指定模板参数作为参考时,我才会发生这种行为。
template<typename T>
void inc(T t) {
t++;
}
int main() {
int i = 41;
int& iref = i;
iref++;
std::cout << i << " " << iref << std::endl; // prints 42 42, as expected
inc(i);
std::cout << i << " " << iref << std::endl; // still prints 42 42, as expected
inc(iref);
std::cout << i << " " << iref << std::endl; // prints 42 42, instead of 43 43
inc<int&>(iref);
std::cout << i << " " << iref << std::endl; // now finally prints 43 43
}
所以,我的问题是:
inc(iref)
传递时的价值?背后的过程是什么?答案 0 :(得分:-1)
引用被剥去了它的参考值,因为如果它不是iref,否则是不明确的(int&amp;或int)。它是这样设计的,所以你可以像下面一样重载:
#include <iostream>
template<typename T>
void inc(T& t) {
t++;
}
int main() {
int i = 41;
int& iref = i;
inc(iref);
std::cout << iref << std::endl;
}