什么是C++;对象(标准类型或样式)可以';不能将副本分配给同一类型的其他副本吗? 这是关于STL中的标准C++类型或容器,所以不是自定义的用户定义类型。
我能想到的是引用和什么是C++;对象(标准类型或样式)可以';不能将副本分配给同一类型的其他副本吗? 这是关于STL中的标准C++类型或容器,所以不是自定义的用户定义类型。,c++,C++,我能想到的是引用和unique\u ptr对象。后者可以移动指定,但不能复制指定。还有哪些类型不允许将其对象分配给同一类型的其他对象 对于常见的数据类型,以下数据类型不可复制分配:std::mutex,std::condition\u变量,int[2],std::thread。(您可以看到,许多与线程关联的数据结构是不可复制分配的) 一般来说,从c++11开始,如果有人将一个类的复制赋值操作符标记为delete,那么这个类的对象是不可复制赋值的。类似地,如果复制分配操作符标记为private,
unique\u ptr
对象。后者可以移动指定,但不能复制指定。还有哪些类型不允许将其对象分配给同一类型的其他对象
std::mutex
,std::condition\u变量
,int[2]
,std::thread
。(您可以看到,许多与线程关联的数据结构是不可复制分配的)
delete
,那么这个类的对象是不可复制赋值的。类似地,如果复制分配操作符标记为private
,则除非复制分配发生在类内部,否则对象不可复制分配
const
,这意味着这些成员是不可更改的,那么编译器默认将该类的复制赋值运算符标记为delete
。例如,std::map
:std::pair
中的每个条目
std::is_copy_assignable
进行检查
#包括
#包括
#包括
#包括
#包括
结构Foo{
Foo&运算符=(const Foo&)=删除;
};
结构FooWithConstMember{
常数INTA=0;
};
结构FooWithPrivateCopyAssigner{
私人:
自动运算符=(const FooWithPrivateCopyAssigner&){return*this;}
};
int main(){
std::你能问一下不允许复制分配的标准类型吗?通过使复制构造函数和复制分配运算符不可用,用户定义的类型可以变得不可复制,这就是unique\u ptr
如何做到的。你用删除的复制分配运算符定义的任何类型?你对每种可能的类型都感兴趣吗?引用不是使用C++特定术语的对象。@StephenNewell是的。很抱歉造成歧义。我刚刚用这些信息编辑了这篇文章。@Imanon:这个问题的重点是什么?你可以查看任何标准库类的定义,看看它是否可复制。这不是隐藏的信息。那么你为什么需要li这是哪一种?
int[2] is copy-assignable? false
mutex is copy-assignable? false
condition variable is copy-assignable? false
Foo is copy-assignable? false
std::pair<const int, int> is copy-assignable? false
FooWithConstMember is copy-assignable? false
FooWithPrivateCopyAssigner is copy-assignable? false