📌  相关文章
📜  C++中的std :: is_copy_assignable带有示例(1)

📅  最后修改于: 2023-12-03 14:59:50.739000             🧑  作者: Mango

C++中的std :: is_copy_assignable带有示例

在 C++ 中,std::is_copy_assignable 是一个模板类,用于判断一个类型是否可复制赋值。其返回值为 truefalse。如果一个类型是可复制赋值的,则返回值为 true。否则返回值为 false

当前版本的 std::is_copy_assignable 支持以下类型:

  • 基本数据类型(例如:intfloatdouble等)
  • 自定义类类型,仅当类存在可复制赋值符号时

下面是一个示例程序,来说明如何使用 std::is_copy_assignable 判断一个类型是否可复制赋值。

#include <iostream>
#include <type_traits>

using namespace std;

class MyClass {
public:
  MyClass() {}
  ~MyClass() {}

private:
  MyClass(const MyClass&); // private copy constructor
  MyClass& operator=(const MyClass&); // private copy assignment operator
};

int main() {
  cout << boolalpha;
  cout << is_copy_assignable<int>::value << endl; // true
  cout << is_copy_assignable<MyClass>::value << endl; // false
  return 0;
}

上面的程序中,我们使用了标准库中的 is_copy_assignable 模板类来查看 int 变量和自定义的 MyClass 类型是否可复制赋值。从输出结果可以看到,int 变量是可以复制赋值的,而 MyClass 类型是不可以复制赋值的。

需要注意的是,如果使用 std::is_copy_assignable 判断的类型不存在复制赋值符号,那么会编译错误。比如下面的这个例子。

class MyClass {
public:
  MyClass() {}
  ~MyClass() {}

private:
  MyClass(const MyClass&); // private copy constructor
};

class MyClass2 {
public:
  MyClass2() {}
  ~MyClass2() {}

  MyClass2& operator=(const MyClass2&) = delete; // delete copy assignment operator
};

int main() {
  cout << boolalpha;
  cout << is_copy_assignable<MyClass>::value << endl; // 会编译错误
  cout << is_copy_assignable<MyClass2>::value << endl; // false
  return 0;
}

上面的程序中,MyClass 类型中没有定义复制赋值符号,而 MyClass2 类型中定义了一个删除复制赋值符号。因此,MyClass 类型使用 std::is_copy_assignable 会编译错误,而 MyClass2 类型会返回 false