草庐IT

copy-initialization

全部标签

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++ - 带 auto 的 initializer_list 包含多个表达式

相当简单的问题,autox11{1,2,3,4};autox1={1,2,3,4};autox22{1.0,2.25,3.5};autox2={1.0,2.25,3.5};据我了解,这里是否有=应该没有区别。但是,使用llvm/clang6.0.0(使用--std=c++17),我得到:main1.cpp:35:17:error:initializerforvariable'x11'withtype'auto'containsmultipleexpressionsautox11{1,2,3,4};~~~~~~~~^main1.cpp:37:20:error:initializerfor

c++ - 带 auto 的 initializer_list 包含多个表达式

相当简单的问题,autox11{1,2,3,4};autox1={1,2,3,4};autox22{1.0,2.25,3.5};autox2={1.0,2.25,3.5};据我了解,这里是否有=应该没有区别。但是,使用llvm/clang6.0.0(使用--std=c++17),我得到:main1.cpp:35:17:error:initializerforvariable'x11'withtype'auto'containsmultipleexpressionsautox11{1,2,3,4};~~~~~~~~^main1.cpp:37:20:error:initializerfor

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++ - Initializer-list-构造一个不可复制(但可 move )对象的 vector

可以将不可复制但可move类型的右值push_back放入该类型的vector中:#includestructS{S(int);S(S&&);};intmain(){std::vectorv;v.push_back(S(1));v.push_back(S(2));v.push_back(S(3));}但是,当我尝试使用相同的右值初始化vector列表时,我收到有关需要复制构造函数的错误:#includestructS{S(int);S(S&&);};intmain(){std::vectorv={S(1),S(2),S(3)};}我在使用GCC4.7时遇到以下错误:Infileincl

c++ - Initializer-list-构造一个不可复制(但可 move )对象的 vector

可以将不可复制但可move类型的右值push_back放入该类型的vector中:#includestructS{S(int);S(S&&);};intmain(){std::vectorv;v.push_back(S(1));v.push_back(S(2));v.push_back(S(3));}但是,当我尝试使用相同的右值初始化vector列表时,我收到有关需要复制构造函数的错误:#includestructS{S(int);S(S&&);};intmain(){std::vectorv={S(1),S(2),S(3)};}我在使用GCC4.7时遇到以下错误:Infileincl