草庐IT

copy-constructor

全部标签

c++ - C++ 标准中短语 "constructors do not have names"的含义

在尝试理解C++标准中的“构造函数没有名称”这一短语时,我似乎在clang中发现了一个错误。有人可以证实这一点吗?VS2015andgcc拒绝此代码,我认为他们它是是正确的。至少,这是我从N4140中的§12.1[class.ctor]/2得到的印象:#includeclassA{public:A(){std::cout§12.1[class.ctor]/2在N4140中:Aconstructorisusedtoinitializeobjectsofitsclasstype.Becauseconstructorsdonothavenames,theyareneverfounddurin

c++ - 通过隐式转换返回时是否需要复制构造函数?

以下代码在VisualC++2013中编译良好,但在GCC或Clang下编译失败。哪个是正确的?通过隐式转换返回对象时是否需要可访问的复制构造函数?classNoncopyable{Noncopyable(Noncopyableconst&);public:Noncopyable(int=0){}};Noncopyablefoo(){return0;}intmain(){foo();return0;}海合会:error:'Noncopyable::Noncopyable(constNoncopyable&)'isprivateNoncopyable(Noncopyableconst&)

c++ - 通过隐式转换返回时是否需要复制构造函数?

以下代码在VisualC++2013中编译良好,但在GCC或Clang下编译失败。哪个是正确的?通过隐式转换返回对象时是否需要可访问的复制构造函数?classNoncopyable{Noncopyable(Noncopyableconst&);public:Noncopyable(int=0){}};Noncopyablefoo(){return0;}intmain(){foo();return0;}海合会:error:'Noncopyable::Noncopyable(constNoncopyable&)'isprivateNoncopyable(Noncopyableconst&)

c++ - is_trivially_copyable 和 is_trivially_copy_constructible 有什么区别?

这些何时会给出不同的答案,这种差异何时有用(如果有的话)? 最佳答案 前者测试triviallycopyable属性,简而言之,这意味着该类型是memcpy-安全的。Atriviallycopyableclassisaclassthat:—hasnonon-trivialcopyconstructors(12.8),—hasnonon-trivialmoveconstructors(12.8),—hasnonon-trivialcopyassignmentoperators(13.5.3,12.8),—hasnonon-trivia

c++ - is_trivially_copyable 和 is_trivially_copy_constructible 有什么区别?

这些何时会给出不同的答案,这种差异何时有用(如果有的话)? 最佳答案 前者测试triviallycopyable属性,简而言之,这意味着该类型是memcpy-安全的。Atriviallycopyableclassisaclassthat:—hasnonon-trivialcopyconstructors(12.8),—hasnonon-trivialmoveconstructors(12.8),—hasnonon-trivialcopyassignmentoperators(13.5.3,12.8),—hasnonon-trivia

c++ - 用 std::istream_iterator 限制 std::copy 的范围

我构建了一个最小的工作示例来展示我在使用STL迭代器时遇到的问题。我正在使用istream_iterator从std::istream:读取floatss(或其他类型)#include#include#includeintmain(){floatvalues[4];std::copy(std::istream_iterator(std::cin),std::istream_iterator(),values);std::cout这会读取所有可能的floatss,直到EOF进入values,它的大小是固定的,4,所以现在显然我想限制范围以避免溢出和准确/最多读取4个值。使用更多“正常”迭

c++ - 用 std::istream_iterator 限制 std::copy 的范围

我构建了一个最小的工作示例来展示我在使用STL迭代器时遇到的问题。我正在使用istream_iterator从std::istream:读取floatss(或其他类型)#include#include#includeintmain(){floatvalues[4];std::copy(std::istream_iterator(std::cin),std::istream_iterator(),values);std::cout这会读取所有可能的floatss,直到EOF进入values,它的大小是固定的,4,所以现在显然我想限制范围以避免溢出和准确/最多读取4个值。使用更多“正常”迭

c++ - Copy-and-Swap 成语是否应该成为 C++11 中的 Copy-and-Move 成语?

如thisanswer中所述,copy-and-swap习语的实现方式如下:classMyClass{private:BigClassdata;UnmovableClass*dataPtr;public:MyClass():data(),dataPtr(newUnmovableClass){}MyClass(constMyClass&other):data(other.data),dataPtr(newUnmovableClass(*other.dataPtr)){}MyClass(MyClass&&other):data(std::move(other.data)),dataPtr(

c++ - Copy-and-Swap 成语是否应该成为 C++11 中的 Copy-and-Move 成语?

如thisanswer中所述,copy-and-swap习语的实现方式如下:classMyClass{private:BigClassdata;UnmovableClass*dataPtr;public:MyClass():data(),dataPtr(newUnmovableClass){}MyClass(constMyClass&other):data(other.data),dataPtr(newUnmovableClass(*other.dataPtr)){}MyClass(MyClass&&other):data(std::move(other.data)),dataPtr(

c++ - 为什么在通过 const 引用传递临时值时调用复制构造函数?

我将一个未命名的临时对象传递给使用constref参数定义的函数。类的复制ctor是私有(private)的,我得到一个编译错误。我不明白为什么在这种情况下调用复制构造函数。classA{public:A(inti){}private:A(constA&){}};voidf(constA&a){}intmain(){f(A(1));//不出所料,当我将main更改为:Aa(1);f(a);它有效。编辑:编译器是gcc4.1.2 最佳答案 表达式A(1)是一个rvalue5.2.3[expr.type.conv]。在使用rvalue表