【发布时间】:2018-12-30 16:00:13
【问题描述】:
考虑这些max函数:
template<typename T>
const T& max(const T& a, const T& b) {
return b < a ? a : b;
}
// overload max(a, b) for char* arguments
const char* max(const char* a, const char* b) {
return std::strcmp(b, a) < 0 ? a : b;
}
template<typename T>
const T& max(const T& a, const T& b, const T& c) {
return max(max(a,b), c);
}
现在,当调用三参数max 时,它返回正确的结果。但是,它在编译过程中也会显示“返回对本地临时对象的引用”。
int main() {
const char* a = "aaa";
const char* b = "bbb";
const char* c = "ccc";
auto result = max(a, b, c);
// this correctly prints "ccc"
std::cout << result << std::endl;
return 0;
}
能否请您一步一步解释在这个示例中如何推导类型,从而导致返回对临时对象的本地引用?
【问题讨论】:
-
你从中间的 2 参数 max() 返回一个 char * 值到你的三个参数 max(),然后通过引用返回该临时参数。
标签: c++ templates type-deduction