Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是C++;对象(标准类型或样式)可以';不能将副本分配给同一类型的其他副本吗? 这是关于STL中的标准C++类型或容器,所以不是自定义的用户定义类型。_C++ - Fatal编程技术网

什么是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
    。(您可以看到,许多与线程关联的数据结构是不可复制分配的)

  • 一般来说,从c++11开始,如果有人将一个类的复制赋值操作符标记为
    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