草庐IT

copy-initialization

全部标签

c++ - 将 const_cast 元素移出 std::initializer_list 是否有风险?

这个问题建立在@FredOverflow'squestion.CLARIFICATION:initializer_listapproachisrequiredastheVC++2012hasabugthepreventsforwardedexpansionofnamespacedarguments._MSC_VERhasthebug.我编写了一个可变参数模板函数,它可以折叠类型化容器中的任意数量的参数。我使用类型的构造函数将可变参数转换为可使用的值。例如。_variant_t:)我的MySql需要这个一次性将参数推送到准备好的语句时的C++库,而我的MySqlVariant将输入数据转

c++ - xutility(2227) : warning C4996: 'std::_Copy_impl'

我收到此警告消息..但我不知道问题出在哪里/哪里..!包括#pragmawarning(push)#pragmawarning(disable:4996)#include#include#include#include#pragmawarning(pop)和警告1>c:\programfiles(x86)\microsoftvisualstudio10.0\vc\include\xutility(2227):warningC4996:'std::_Copy_impl':Functioncallwithparametersthatmaybeunsafe-thiscallreliesont

c++ - initializer_list 与 2013 中的双重删除

今天在我的项目中遇到了内存问题,其中一个类使用了c++11initializer_list。系统发出内存问题的信号:“dbgdel.cpp中的表达式_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)。我将代码简化为一个简单的示例,它不再抛出表达式,但问题在调试输出中变得明显。在我看来,这代码是正确的,它似乎也适用于g++。#include#include#include#include#include#include#include#includeusingnamespacestd;classB{public:chardata[256];B(conststri

c++ - std::initializer_list 构造函数

在这样的代码中:#include#include#includestructA{A(){std::couts){std::coutl){std::cout为什么叫std::initializer_list构造函数的规范?如果我们定义,例如,构造函数带有std::initializer_list,它会产生歧义编译错误。.这种构造的规则是什么,为什么它对std::initializer_list如此具体用数字作为模板参数? 最佳答案 如果一个类有一个初始化列表构造函数,那么{whatevergoeshere}表示通过{whateverg

c++ - 我可以使用 std::initializer_list 而不是大括号括起来的初始化程序来初始化数组吗?

我可以使用std::initializer_list对象而不是大括号括起来的初始化程序来初始化数组吗?众所周知,我们可以这样做:http://en.cppreference.com/w/cpp/language/aggregate_initializationunsignedcharb[5]{"abc"};//equivalenttounsignedcharb[5]={'a','b','c','\0','\0'};intar[]={1,2,3};std::arraystd_ar2{{1,2,3}};//std::arrayisanaggregatestd::arraystd_ar1={

C++ FileIO Copy -VS- System("cp file1.x file2.x)

编写文件复制例程会更快/更高效,还是我应该只执行对cp的系统调用?(文件系统可能不同[nfs、local、reiser等],但它总是在CentOSlinux系统上) 最佳答案 Invoking一个shell通过使用system()函数效率不高,也不是很安全。在Linux中复制文件最有效的方法是使用sendfile()系统调用。在Windows上,CopyFile()应使用API函数或其相关变体之一。Example使用sendfile:#include#include#include#include#include#include#i

c++ - "In class member initialization"功能是否已融入 C++11?

Inclassinitializationfeature,它允许在类本身内部初始化普通成员,structA{inta=0;//error:ISOC++forbidsin-classinitializationofnon-conststaticmember‘a’};这在最新的编译器gcc-4.6中出现错误(使用-std=c++0x)。此功能是否已纳入C++11标准或gcc仍然不支持? 最佳答案 是的,这在C++0x中是合法的。在N3290§12.6.2/8中有一个例子:structC{/*...*/intj=5;//OK:jhasth

c++ - C++11 中的 "member initializer"是什么?

我遇到了一个名为“成员初始化器”的奇怪概念。Here说:C++11addedmemberinitializers,expressionstobeappliedtomembersatclassscopeifaconstructordidnotinitializethememberitself.它的定义是什么?有没有一些例子来说明它的用法? 最佳答案 它可能是指类内成员初始化器。这允许您在声明点初始化非静态数据成员:structFoo{explicitFoo(inti):i(i){}//xisinitializedto3.1416int

c++ - 类 : handling copy constructor and destructor (C++) 内的 vector

以“big3”(构造函数、复制构造函数、析构函数)的简单类:#includeusingnamespacestd;//actuallygoesintheCfilethatlinkstothisheaderfile...classplanets(){//storesmassandradiidataforplanetsinasolarsystem.public:vectormass;vectorradius;//constructorplanets(intnumObj){for(inti=0;imass(p.mass);//copyvectorsintonewclass.vectorradi

c++ - 稍后添加 initializer_list 构造函数时,使用大括号初始化语法会改变构造行为吗?

假设我有这样的类(class):classFoo{public:Foo(intsomething){}};我使用以下语法创建它:Foof{10};然后我添加一个新的构造函数:classFoo{public:Foo(intsomething){}Foo(std::initializer_list){}};f的构造会发生什么?我的理解是它将不再调用第一个构造函数,而是现在调用初始化列表构造函数。如果是这样,这似乎很糟糕。为什么这么多人推荐使用{}语法而不是()进行对象构造,而稍后添加initializer_list构造函数可能会默默地破坏事情?我可以想象这样一种情况,我正在使用{}语法构造