【发布时间】:2020-01-14 12:30:15
【问题描述】:
#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 被传递给构造函数时,会选择非模板重载。调用复制构造函数时,会选择模板重载。据我所知,在重载决议期间,非模板函数总是优于模板函数。为什么复制构造函数的处理方式不同?
【问题讨论】:
-
本题中基于意见的内容为零。为什么将 VTC 作为 POB?
标签: c++ copy-constructor overload-resolution function-templates constructor-overloading