c++ - 模板构造函数一个参数 const 而不是 const

标签 c++ templates copy-constructor

我尝试使用带有一个参数的模板构造函数。我尝试了两种情况 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

关于c++ - 模板构造函数一个参数 const 而不是 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41324007/

相关文章:

c++ - 如何将使用参数包和类型名的类作为函数的输入参数(C++)

c++ - 初始化对象时复制构造函数/赋值运算符混淆

C++ 赋值奇怪的行为

c++ - 从大括号 std::string 构造 std::string_view,clang 和 gcc 不同意 -Wconversion

c++ - 这个额外的线程如何使它比无线程更快?

c++ - 未编译函数模板中使用的类的前向声明

c++ - 自毁:this->MyClass::~MyClass() vs. this->~MyClass()

c++ - 在 C++ 和 Lua 之间来回发送变量指针?

c++ - 尽管有打印功能,但我的 Vector 没有打印

模板类型参数的 C++ 常量