📅  最后修改于: 2023-12-03 14:59:50.739000             🧑  作者: Mango
在 C++ 中,std::is_copy_assignable
是一个模板类,用于判断一个类型是否可复制赋值。其返回值为 true
或 false
。如果一个类型是可复制赋值的,则返回值为 true
。否则返回值为 false
。
当前版本的 std::is_copy_assignable
支持以下类型:
int
、float
、double
等)下面是一个示例程序,来说明如何使用 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
。