c++ - 未在模板类中调用复制构造函数

标签 c++ g++ copy-constructor

我在文件 myclass.hpp 中有以下类:

#ifndef MYCLASS_HPP
#define MYCLASS_HPP
#include <cstdlib>
#include <iostream>
template <std::size_t l, typename T>
class MyClass {
public:
  MyClass();
  MyClass(const MyClass<l,T>& other);
};
#include "myclass.tpp"
#endif

和伪实现文件myclass.tpp:

template <std::size_t l, typename T>
MyClass<l,T>::MyCLass() {
  std::cout << "Ctor" << std::endl;
}
template <std::size_t l, typename T>
MyClass<l,T>::MyCLass(const MyCLass<l,T>& other) {
  std::cout << "COPY Ctor" << std::endl;
}

在我的主文件中我有:

#include "myclass.hpp"
int main(int argc, char** argv) {
  MyCLass<10,int> m1;
  MyClass<10,int> m2;
  m1 = m2; // <-- HERE
}

复制构造函数没有被调用。打印输出如下:

Ctor

Ctor

我做错了什么?谢谢

最佳答案

因为您没有调用复制构造函数,所以您调用的是复制赋值运算符。复制构造函数调用将是:

MyClass<10,int> m2(m1);

您调用的函数具有签名:

template <std::size_t l, typename T>
MyClass<l, T>& operator=(const MyClass<l, T>& other);

关于c++ - 未在模板类中调用复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18652348/

相关文章:

c++ - 跨翻译单元和 gcc 4.6 自动内联函数

c++ - 搜索 "$"在 C++ 中返回错误

c++ - 方便的标志处理,其中所有标志都不能适应 64 位

c++ - 外部库的 undefined reference (C++、QT、Ubuntu 14、CCV)

gcc - 传递 ‘const 此参数会丢弃限定符 [-fpermissive]

c++ - 在 c++ 中编译但在 c (gcc) 中编译时很复杂

c# - 什么是复制构造函数以及何时应在 C# 中使用它?

c++ - 使用指针基类的 =operator 的多态性

java - 包含另一个集合的克隆集合

C++ 从 protected 抽象/派生类创建变量