【问题标题】:template constructor one parameter const and not const模板构造函数一个参数 const 而不是 const
【发布时间】:2017-05-10 11:47:24
【问题描述】:

我尝试使用带有一个参数的模板构造函数。我尝试了 2 种情况 const 参数和 non-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);
}

输出为空:

所以构造的两个副本都是生成的。为什么会有这种行为?

【问题讨论】:

    标签: c++ templates copy-constructor


    【解决方案1】:

    所以默认的复制构造函数是为 Foo1 而不是为 Foo2 生成的。

    错了。

    两个拷贝构造函数都生成了,但是

    template <typename T> Foo2( T& f) // with T = Foo2
    

    比复制构造函数更好(精确)匹配,因为您传递了非 const Foo2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多