草庐IT

func_returning_a_tuple

全部标签

c++ - 警告 : returning reference to temporary

我有这样的功能conststring&SomeClass::Foo(intValue){if(Value10)return"";elsereturnSomeClass::StaticMember[i];}我收到警告:返回对临时的引用。这是为什么?我认为函数返回的两个值(对constchar*""的引用和对静态成员的引用)不能是临时的。 最佳答案 这是一个发生不需要的隐式转换的示例。""不是std::string,因此编译器试图找到一种方法将其变成一个。并且通过使用string(constchar*str)构造函数,它在该尝试中成功。

c++ - GCC 错误 : cannot convert 'const shared_ptr<...>' to 'bool' in return

我正在切换到GCC4.6.1,它开始提示在GCC4.4和MSVC10上运行良好的代码。从这样的函数返回时,它似乎不想在shared_ptr和bool之间进行转换:classClass{shared_ptrpointer_;};boolClass::Function()const{returnpointer_;}使用returnstatic_cast(pointer_);一切正常。到底他妈发生了什么?这是--std=cpp0x. 最佳答案 在C++11中,shared_ptr有一个explicitoperatorbool这意味着sha

c++ - std::tuple 是如何实现的?

我想知道元组是如何在C++0x的标准库中实现的。我试图阅读descriptioninlibstdc++manual然后阅读templatelisting,但是真的很难理解它是如何工作的,尤其是在阅读代码时。有人可以用几句话向我解释元组实现的想法吗?我想知道这一点,因为我考虑在我的代码中使用元组,我想了解它是如何工作的以及它带来了什么类型的开销(仅延长编译时间,在内存上执行许多复制操作,在构造函数中执行许多其他函数等)。 最佳答案 实现元组的一种方法是使用多重继承。元组元素由叶类持有,元组类本身继承自多个叶。在伪代码中:templat

c# - 我应该使用 return/continue 语句而不是 if-else 吗?

在C、C++和C#中,当在函数或循环语句中使用条件时,可以尽早使用continue或return语句并摆脱if-else语句的else分支。例如:while(loopCondition){if(innerCondition){//dosomestuff}else{//dootherstuff}}变成while(loopCondition){if(innerCondition){//dosomestuffcontinue;}//dootherstuff}和voidfunction(){if(condition){//dosomestuff}else{//dootherstuff}}变成v

c++ - 在 `std::get<I>` 上使用 `std::tuple` 是否保证对于 `I` 的不同值是线程安全的?

假设我有std::tuplemy_tuple{x0,x1,x2};其中T0、T1和T2是值类型(即不可能有别名)。p>访问my_tuple的元素并使用std::get从多个线程同时改变它们是否安全,只要每个线程访问不同的元素?例子:templatevoidprocess(T&x){/*mutate`x`*/}//...std::thread{[&]{process(std::get(my_tuple));}}.detach();std::thread{[&]{process(std::get(my_tuple));}}.detach();std::thread{[&]{process(

c++ - 三元运算符c++中的return语句

我用三元运算符写了绝对函数如下intabs(inta){a>=0?returna:return-a;}我收到以下错误消息../src/templates.cpp:Infunction‘intabs(int)’:../src/templates.cpp:4:error:expectedprimary-expressionbefore‘return’../src/templates.cpp:4:error:expected‘:’before‘return’../src/templates.cpp:4:error:expectedprimary-expressionbefore‘return

c++ - 在 `return 0` 末尾设置 `main` 可选的理由是什么?

从C99标准开始,如果没有提供return,编译器需要生成等效的return0或returnEXIT_SUCCESS在main的末尾。大约在同一时间,C++语言标准也发生了相应且相同的更改。我对两者的原因很感兴趣,我猜想它们不太可能是完全独立且不相关的变化。我的问题是:记录在案的原因是什么?一个理想的答案是引用C和C++的权威来源,这就是为什么我用这两种语言标记这个问题。请注意,与问题Whatthereasonsfor/againstreturning0frommaininISOC++?不同,我不是在询问是否要在我的程序中编写return0的建议——我是在问为什么语言标准本身被改变了。

c++ - std::make_tuple 不做引用

我一直在尝试std::tuple结合引用文献:#include#includeintmain(){inta,b;std::tupletest(a,b);std::get(test)=1;std::get(test)=2;std::cout(test2)=-1;std::get(test2)=-2;std::cout(test3)=-1;std::get(test3)=-2;std::cout在此处的三个示例中,前两个按预期工作。然而,第三个没有。我期待auto类型(test3)与test的类型相同(即std::tuple)。看来std::make_tuple不能自动生成引用元组。为什么

c++ - 为什么 GCC 说 "named return values no longer supported"?

我不小心把函数定义的左大括号放在了return语句之后intid(intk)returnk;{}但是GCC回答了一个奇怪的错误消息error:namedreturnvaluesarenolongersupported谁能解释一下这个奇怪的功能是什么?我从来没有听说过。 最佳答案 见here-通过在函数头中显式定义命名返回值来实现早期NRVO。添加了对没有此扩展的NRVO的原生支持here-GCC3.1发布系列。上下文的简要剪切和粘贴:G++nowsupportsthe"namedreturnvalueoptimization":fo

c++ - 为什么 'return' 、 'continue' 或 'break' 不能与逗号运算符一起使用?

我可以写代码if(1)x++,y++;而不是if(1){x++;y++;},但在某些情况下它不起作用(见下文)。如果你能告诉我这件事就好了。intx=5,y=10;if(x==5)x++,y++;//Itworksif(x==5)x++,return0;//Itshowsanerror这同样适用于for循环:for(inti=0;i 最佳答案 这是因为return和break是语句,而不是表达式。因此,您不能以任何方式在另一个表达式中使用它。if和其他类似的也是语句。但是,您可以做的是重写您的表达式(对于return),使其不嵌套在