我无法理解我的程序的以下行为。据我所知,模板参数推导只允许1)数组或函数到指针的转换或2)常量转换。下面的程序应该会导致编译错误。但是,如果我传递两个等长的c风格字符串,它会编译。是什么导致了这种行为?
#include <iostream>
#include <type_traits>
template <typename T>
int compare(T& x, T& y) {
return 1;
}
int main() {
compare("abc", "abc"); // no compilation error
}
1条答案
按热度按时间eeq64g8w1#
你可以在这里使用cpp-insights to have a look,你会看到你生成的函数签名是:
这是因为这两个常量的类型都是
const char[4]
,并且你在签名中引用了它们,结果是const&
的原因是你的类型带来了const
,同样的工作方式: