复制模板类的构造函数

匿名

我读到,模板copy-con从来都不是默认的复制构造函数,而模板Assignment-op从来都不是副本分配运算符。

我不明白为什么需要这个限制,并且立即上线去ideone并返回一个测试程序,但是在这里,复制构造函数再也没有被调用过了。我遇到了模板化构造函数并尝试过,但是仍然没有调用复制构造函数。

#include <iostream>
using namespace std;

template <typename T> class tt
{
    public :
    tt()
    {
        std::cout << std::endl << "   CONSTRUCTOR" << std::endl;
    }
    template <typename U> const tt<T>& operator=(const tt<U>& that){std::cout << std::endl << "   OPERATOR" << std::endl;}
    template <typename U> tt(const tt<U>& that)
    {
        std::cout << std::endl << "    COPY CONSTRUCTOR" << std::endl;
    }
};


tt<int> test(void)
{
    std::cout << std::endl << "      INSIDE " << std::endl; tt<int> a; return a;
}

int main() {
    // your code goes here
    tt<int> a ; a = test();

    return 0;
}

有人可以向我解释施加此限制的全部原因,以及如何编写模板类的副本构造函数。

谢谢

克瑞克SB

有严格的规则构成复制构造函数(参见C ++ 11,12.8):

  • 它不是模板。

  • 对于类T,其第一个参数必须具有类型T &T const &T volatile &T const volatile &

  • 如果它具有多个参数,则其他参数必须具有默认值。

如果你不声明拷贝构造函数,形式的拷贝构造函数T::T(T const &)隐式声明为您服务。(它可能会或可能不会实际定义,如果已定义,则可能会定义为已删除。)

(通常的重载解决方案规则意味着您最多可以有四个副本构造函数,每个CV限定条件一个。)

移动构造函数有类似的规则,用&&代替&

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模板类的复制构造函数

来自分类Dev

模板类复制构造函数未调用

来自分类Dev

复制带有模板类的构造函数未得到调用

来自分类Dev

C ++类模板复制构造函数返回类型

来自分类Dev

C ++类模板复制构造函数返回类型

来自分类Dev

具有模板化构造函数以及复制和移动构造函数的类

来自分类Dev

模板类复制构造函数参数是否带有模板参数?

来自分类Dev

模板类的专门构造函数

来自分类Dev

专攻模板类构造函数

来自分类Dev

专攻模板类构造函数

来自分类Dev

条件类模板构造函数

来自分类Dev

从类模板继承模板构造函数?

来自分类Dev

从模板基类的模板构造函数派生

来自分类Dev

类any中的模板构造函数与非模板构造函数

来自分类Dev

类any中的模板构造函数与非模板构造函数

来自分类Dev

在基于类模板参数启用构造函数时,是否总是有必要复制它吗?

来自分类Dev

来自基类的复制构造函数

来自分类Dev

模拟复制构造函数的C ++类

来自分类Dev

根据类模板参数敲除类模板构造函数

来自分类Dev

从模板派生类调用模板基类的构造函数

来自分类Dev

模板类找不到构造函数

来自分类Dev

模板类构造函数的专业化

来自分类Dev

模板类和遍历的默认构造函数

来自分类Dev

在构造函数中使用模板类

来自分类Dev

如何从类构造函数传递模板参数

来自分类Dev

模板类构造函数的专业化

来自分类Dev

如何模板化类构造函数

来自分类Dev

在模板类的构造函数末尾调用的模板的析构函数

来自分类Dev

使用模板类复制成员函数