草庐IT

c++ - 是否可以这样编码 :while(lambda){}

下面的代码编译没有错误:std::stringlastName,chldName;while([&](){returntrue;}){//codes...}但是当我这样尝试时:std::stringlastName,chldName;while([&](){std::cin>>lastName;returntrue;}){//codes...}编译器提示:error:couldnotconvert'main()::{(*&lastName)}'from'main()::'to'bool'如何理解这个错误?是否可以这样使用lambda? 最佳答案

c++ - 从没有参数的函数返回整数数组

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:ReturninglocaldatafromfunctionsinCandC++viapointer我需要创建一个不带参数的返回数组的函数我收到错误:“警告:函数返回局部变量的地址”为了便于阅读,我的代码已经过简化int*getNums(){intnums[8];nums={1,2,3,4,5,6,7,8};returnnums;}我被引导明白当函数结束时指针丢失了,但是数组仍然会被发送吗?如果不是,在函数调用中返回这个不带参数的整数数组的好方法是什么?提前感谢您的帮助!干杯

c++ - C++ 是否强制执行 return 语句?

好吧,我在C++编译器中发现了一些奇怪的地方。我有一段不太复杂的代码需要重构,但我不小心设法离开了一条没有返回语句的路径。我的错。另一方面,当我运行它时,它编译并出现了段错误,很明显,这条路径被击中了。这是我的问题:这是一个编译器错误,还是不能保证C++编译器会强制要求在非void返回函数中使用return语句?哦,要明确一点,在这种情况下,这是一个没有伴随else的不必要的if语句。没有转到,没有退出,没有中止。 最佳答案 个人认为这应该是一个错误:intf(){}intmain(){intn=f();return0;}但大多数编

c++ - 我如何在 Flex/bison 中实现 If 语句

我没有收到错误,请你帮我解决一下,这是.l和.y文件。谢谢。%{#include"ifanw.tab.h"externintyylval;%}%%"="{returnEQ;}"!="{returnNE;}""{returnGT;}">="{returnGE;}"+"{returnPLUS;}"-"{returnMINUS;}"*"{returnMULT;}"/"{returnDIVIDE;}")"{returnRPAREN;}"("{returnLPAREN;}":="{returnASSIGN;}";"{returnSEMICOLON;}"IF"{returnIF;}"THEN"{r

c++ - 为什么我的程序在 return 语句处崩溃?

执行以下代码时出现异常boolFieldValueMessage::Get(conststd::string&field,double&value){stringtext;if(Get(field,text)){std::stringstreamsstr(text);sstr>>value;if(sstr.fail())returnfalse;elsereturntrue;}else{returnfalse;}}获取函数如下boolHashMapMessage::Get(conststd::string&field,std::string&value){Field2Value::ite

c++ - 返回值的复制构造函数何时发生

我有以下成员函数:PersonClassB::DoSomethingAndReturnPerson(){RAIIMutexmyLock(&m_mutex);returnm_person;}RAIIMutex是一个辅助类,它接收互斥锁并将其锁定在构造函数中并在析构函数中释放。m_person是Person类型(尺寸非常小)。其他线程中的其他函数可能会更改此成员。我想按值返回m_person(返回拷贝),当然我想避免在复制时在另一个线程中更改m_person的情况在返回中,所以我添加了锁。但是首先会发生什么?编译器是先创建m_person的拷贝还是先调用myLock的析构函数?理论上它很容

c++ - 为什么对于具有多个返回路径的 lambda 返回 lambda 会出现类型推导错误?

我有以下代码:intmain(){autof=[]{if(1)return[]{return1;};elsereturn[]{return2;};};returnf()();}使用GCC5.2.1会引发以下编译器错误:error:inconsistenttypes‘main()::::’and‘main()::::’deducedforlambdareturntypeelsereturn[]{return2;};很明显,这两种类型看起来是一样的,所以我不确定这是GCC的误导性错误消息还是它实际上是一个错误。据我所知,这应该编译;lambda返回类型应推导为std::function.有

c++ - 获取函数指针的参数计数

我现在正在使用这段代码:size_targc(std::function){return0;}size_targc(std::function){return1;}size_targc(std::function){return2;}size_targc(std::function){return3;}//...但它有点丑陋且受限(用户不能使用具有任意数量参数的函数调用argc。)有更好的方法吗?注意:返回类型和参数类型总是相同的。我知道我可以使用模板来接受任何类型,但我不需要它。 最佳答案 @Paolo答案的更清晰版本,可用于实际

c++ - 返回时如何避免复制

我有一个返回vector或集合的函数:setfoo(){setbar;//createandmassagebarreturnbar;}setafoo=foo();在这种情况下,我在函数foo()中创建一个临时内存空间,然后通过复制将其分配给afoo。我真的很想避免这个拷贝,任何简单的方法我可以在C++11中做到这一点吗?我认为这与右值相关。好的,更新问题:如果我要返回一个自己定义的对象,不是vector或集合的东西,这是否意味着我应该定义一个移动构造函数?像这样:classvalue_to_return{value_to_return(value_to_return&&other){/

c++ - "return (0);"函数中的 'main' 语句中的括号 0 - 它们的作用是什么?

这个问题在这里已经有了答案:Whendoextraparentheseshaveaneffect,otherthanonoperatorprecedence?(2个答案)关闭3年前。通常自动生成的c++"main"函数在最后return(0);或return(EXIT_SUCCESS);但是为什么上面的语句中有括号呢?是不是跟C语言什么的有关?//编辑我知道这是正确的,但有人把这些括号放在了一起是有原因的。这是什么原因?!