#include <iostream>
struct uct
{
uct() { std::cerr << "default" << std::endl; }
uct(const uct &) { std::cerr << "copy" << std::endl; }
uct( uct&&) { std::cerr << "move" << std::endl; }
uct(const int &) { std::cerr << "int" << std::endl; }
uct( int &&) { std::cerr << "int" << std::endl; }
template <typename T>
uct(T &&) { std::cerr << "template" << std::endl; }
};
int main()
{
uct u1 ; // default
uct u2( 5); // int
uct u3(u1); // template, why?
}
构造函数的模板重载适用于两个声明(u2
和u3
)。但是当将int
传递给构造函数时,会选择非模板重载。调用复制构造函数时,会选择模板重载。据我所知,在重载决议期间,非模板函数总是优先于模板函数。为什么复制构造函数处理方式不同呢?