草庐IT

c++ - 临时对象混淆

看看这段代码structS{inti;intj;};intmain(){assert(S().i==S().j)//isitguaranteed?}为什么? 最佳答案 isitguaranteed?是的,这是有保证的。S().i和S().j的值将为0。()表示valueinitialization.(这意味着i和j将被零初始化,因为S是一个没有用户定义的默认构造函数的类) 关于c++-临时对象混淆,我们在StackOverflow上找到一个类似的问题: htt

c++ - 临时对象有作用域吗?

名称具有范围(编译时属性),而对象具有生命周期(运行时属性)。对吧?我经常看到人们谈论临时对象“超出范围”。但是由于临时对象没有名称,我认为在这种情况下谈论“范围”是没有意义的。临时对象的生命周期是veryclearlydefined与范围无关。你同意吗? 最佳答案 Nameshavescope(acompile-timeproperty),是的。我不会称之为属性(property)思想。但基本上是的。whileobjectshavelifetimes(aruntimeproperty).Right?变量分为三种类型。每种类型都具有

c++ - 临时对象是 xvalues 吗?

我目前正在写我的学位论文,它还涉及对C++11背后理论的一些解释,这真的很好,因为C++是我选择的编程语言,而且该标准或多或少是免费提供的(N3337)让自己迷路。然而,我在尝试准确详细地解释新的xvalue类别时遇到了困难。据我所知,临时对象始终是一个xvalue,但我在标准中找不到对此的任何引用。据我所知,函数调用表达式的值类别是具有非引用返回类型,是一个xvalue。该标准说“xvalue是某种涉及右值引用的表达式的结果”,这让我很烦。例如:TestClass{...};testClasscreateObject(){returntestClass();}voidsomeFunc

c++ - 在临时字符串上使用 string::c_str

这个问题在这里已经有了答案:C++destructionoftemporaryobjectinanexpression(4个答案)关闭8年前。关于临时对象何时被销毁,这是否有效:FILE*f=fopen(std::string("my_path").c_str(),"r");是否会在计算完fopen的第一个参数后或fopen调用后立即销毁临时对象。使用以下代码进行测试:#includeusingnamespacestd;structA{~A(){printf("~A\n");}constchar*c_str(){return"c_str";}};voidfoo(constchar*s)

c++ - 将对临时/匿名 lambda 的 const 引用传递给 std::thread 构造函数是否安全?

从这个问题开始:can-a-temperary-lambda-by-passed-by-reference?我有一个固定的代码片段://globalvariablestd::threadworker_thread;//Templatefunctiontemplatevoidstart_work(constFunctor&worker_fn)//lambdapassedbyconstref{worker_thread=std::thread([&](){worker_fn();});}这样调用:voiddo_work(intvalue){printf("Hellofromworker\r

c++ - 我如何告诉编译器不要创建临时对象?

我正在更改一个过去采用整数参数的旧例程,以便它现在采用对对象的常量引用。我希望编译器会告诉我从哪里调用函数(因为参数类型错误),但是对象有一个接受整数的构造函数,所以编译器没有失败,而是创建了一个临时对象,将它传递给整数,并将对该例程的引用传递给该例程。示例代码:classthing{public:thing(intx){printf("Creatingathing(%d)\n",x);}};classX{public:X(constthing&t){printf("CreatinganXfromathing\n");}};intmain(int,char**){thinga_thin

c++ - std::function 创建临时文件时内存访问错误

我目前正在实现一些抽象来表示3D对象的水平集操作。基本上是在this中描述的内容GLSL着色器的精彩页面。为了简要概述,3D对象可以用一个函数来描述,该函数将R^3域映射到称为水平集(或符号距离函数)的标量。例如,对于球体,水平集函数由phi(X)=X.Norm2()-R*R定义,其中Norm2表示平方欧氏范数R^3中的一个vector。所以我想出了一个代表这样一个概念的LevelSetObject类:classLevelSetObject{usingSDFFunction=std::function;protected:SDFFunctionm_SDF;public:doubleSD

c++ - 在访问 vector<bool> 中的元素地址时获取临时地址

我仅在访问boolvector中的元素地址时收到警告。对于int等其他数据类型的vector,我不会收到任何警告。例如vectorboolVect;boolVect.push_back(false);if(boolVect.size()>0){cout我在声明“cout有人可以澄清一下吗? 最佳答案 std::vector坏了(参见例如http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=98或Alternativetovector)。它是std::vector

c++ - 返回 const 引用与临时对象

我想知道为什么返回本地对象的constreference是非法的,而返回localobject是合法的,只要你将它分配给const引用?vectorf_legal(){vectortempVec;tempVec.push_back(1);returntempVec;}constvector&f_illegal(){vectortempVec;tempVec.push_back(1);returntempVec;}voidg(){constvector&v1=f_legal();//legalconstvector&v2=f_illegal();//illegal}编辑:我的观点是,如果

c++ - 如何配置 ImageMagick 不使用任何临时文件?

我试图在不接触文件系统的情况下运行ImageMagick:图像数据从内存/网络读取,并作为blob写回套接字.但是,ImageMagick不断尝试写入临时文件,这些文件要么由于测试中止/失败而填满我的测试系统,要么在磁盘极慢的系统上导致问题:这是一个奇怪的限制,但我的许多转换主机都是嵌入式的-类似block设备的系统,极度对任何操作的响应都非常慢,甚至stat()s。问题:有没有一种方法可以将ImageMagick配置为在图像处理期间不接触磁盘?假设ImageMagick将使用的所有必需模块都已经加载,并且没有任何ImageMagick功能将处理外包给子进程与文件系统对话将被使用。这样