模板构造函数一个参数 const 而不是 const
template constructor one parameter const and not const
我尝试使用带有一个参数的模板构造函数。我尝试了两种情况 const 参数和非常量参数。
class Foo1
{
public:
Foo1() {}
template <typename T>
Foo1(const T& f)
{
cout<<"Foo1"<<endl;
}
};
class Foo2
{
public:
Foo2() {}
template <typename T>
Foo2( T& f)
{
cout<<"Foo2"<<endl;
}
};
int main()
{
Foo1 f1;
Foo1 f11(f1);
Foo2 f2;
Foo2 f21(f2);
}
输出为:
Foo2
因此默认复制构造函数是为 Foo1 而不是为 Foo2 生成的。
当我将主要功能更改为:
int main()
{
const Foo1 f1;
Foo1 f11(f1);
const Foo2 f2;
Foo2 f21(f2);
}
输出为空:
所以生成的两个副本都是生成的。为什么会有这种行为?
so default copy constructor is generated for Foo1 and not for Foo2.
错了。
两个拷贝构造函数都生成了,但是
template <typename T> Foo2( T& f) // with T = Foo2
比复制构造函数更好(精确)匹配,因为您传递了一个非 const
Foo2
.
我尝试使用带有一个参数的模板构造函数。我尝试了两种情况 const 参数和非常量参数。
class Foo1
{
public:
Foo1() {}
template <typename T>
Foo1(const T& f)
{
cout<<"Foo1"<<endl;
}
};
class Foo2
{
public:
Foo2() {}
template <typename T>
Foo2( T& f)
{
cout<<"Foo2"<<endl;
}
};
int main()
{
Foo1 f1;
Foo1 f11(f1);
Foo2 f2;
Foo2 f21(f2);
}
输出为: Foo2
因此默认复制构造函数是为 Foo1 而不是为 Foo2 生成的。
当我将主要功能更改为:
int main()
{
const Foo1 f1;
Foo1 f11(f1);
const Foo2 f2;
Foo2 f21(f2);
}
输出为空:
所以生成的两个副本都是生成的。为什么会有这种行为?
so default copy constructor is generated for Foo1 and not for Foo2.
错了。
两个拷贝构造函数都生成了,但是
template <typename T> Foo2( T& f) // with T = Foo2
比复制构造函数更好(精确)匹配,因为您传递了一个非 const
Foo2
.