草庐IT

T_RETURN

全部标签

c++ - unordered_map : what to return if key is not in map?

作为这个问题的前言,我不得不说我是一名Java程序员,因此比C++更习惯Java中的Maps语义。在Java中,当在Map中查找键时,返回null是很常见的。我正在将我们的一些代码翻译成c++,并尝试在与unordered_map交互时找到c++的处理方式。具体来说,我有一个包含unordered_map的类。我没有将映射直接暴露给客户端代码,而是有2个包装函数,一个用于将键/值对放入映射中,另一个用于检索指定键的值,即:voidset_tag_value(stringtag,stringvalue);string&get_tag_value(stringtag);如果我使用unord

c++ - "if(T t = ...) { } else return t;"的优雅方式?

这个“成语”有没有更好的办法?if(States=loadSomething()){}elsereturns;换句话说,我想做一些事情,它可能会返回错误(带有消息)或成功状态,如果有错误我想返回它。这可能会变得非常重复,所以我想缩短它。例如if(States=loadFoobar(&loadPointer,&results)){}elsereturns;if(States=loadBaz(&loadPointer,&results)){}elsereturns;if(States=loadBuz(&loadPointer,&results)){}elsereturns;这不能使用我喜欢

c++ - Boost.Spirit.Qi : How to return attributes with Nabialek trick

按照几个教程(例如http://boost-spirit.com/home/articles/qi-example/nabialek-trick/),我想使用Nabialek技巧来拥有一个动态解析器​​。解析已经可以正常工作,但我没有得到传输的属性。解释如https://stackoverflow.com/a/9109972/2524462建议,属性应该是可能的,但不是参数。这只是一个将字符串和数字解析为结构的小示例。这只是为了展示我的问题;这种方法应该在以后真正需要动态解析器​​的更大系统中使用。问题:如何使用Nabialek技巧传输属性?我不是精神专家,所以请多多包涵。我正在使用g

C++:如何在不强制转换的情况下避免继承类中的 "invalid covariant return type"?

我有一个非常复杂的类层次结构,其中的类是相互依赖的交叉类:有两个抽象类A和C,它们分别包含一个返回C和A实例的方法。在他们继承的类中,我想使用协变类型,在这种情况下这是一个问题,因为我不知道一种方法来前向声明继承关系。我得到一个“test.cpp:22:error:invalidcovariantreturntypefor'virtualD*B::outC()'”-错误,因为编译器不知道D是C的子类。classC;classA{public:virtualC*outC()=0;};classC{public:virtualA*outA()=0;};classD;classB:publi

C++11 可变参数模板 : return tuple from variable list of vectors

我想写一些类似于pythonzip(http://docs.python.org/2/library/functions.html)的东西。zip应该接受可变数量的不同类型的vector,并返回一个vector元组,截断到最短输入的长度。例如x=[1,2,3]v=['a','b']我希望输出是一个vector[,]如何在C++11中做到这一点? 最佳答案 急切地做到这一点并且只通过复制非常容易:#include#include#includetemplatestd::vector>zip(std::vectorconst&...vs

c++ - ARM C++ ABI : Constructor/destructor return values

我一直在阅读Clang源代码,并发现了一些关于ARMC++ABI的有趣之处,我似乎无法理解其理由。来自ARMABIdocumentation的在线版本:ThisABIrequiresC1andC2constructorstoreturnthis(insteadofbeingvoidfunctions)sothataC3constructorcantailcalltheC1constructorandtheC1constructorcantailcallC2.(对于非虚拟析构函数也是如此)我不确定C1、C2和C3在这里引用什么...本节旨在修改来自通用(即安腾)ABI的第3.1.5节,但

c++ - 为什么在没有明确的 return 语句的情况下,递归的 return 调用会脱离堆栈?

我看到了一个示例程序来演示递归,它看起来不应该工作,但确实有效。逻辑很清楚,但为什么即使没有返回递归函数调用,它也能工作呢?即使没有请求,似乎return命令也会脱离堆栈。这是语言标准还是gcc的东西?我在Windows和Linux上看到了用gcc编译的C和C++。#include#includeusingnamespacestd;intisprime(intnum,inti){if(i==1){return1;}else{if(num%i==0)return0;elseisprime(num,i-1);//shouldbereturned}}intmain(intargc,char*

C++ 编译器错误 : "return type specification for constructor invalid"

这是我的代码。编译所有文件时出现此错误,我不确定自己做错了什么。请指教。Molecule.cpp:7:34:error:returntypespecificationforconstructorinvalid//SunnyPathak//Molecule.cpp#include#include"Molecule.h"usingnamespacestd;inlinevoidMolecule::Molecule(){intcount;count=0;}//endfunctionboolMolecule::read(){cout 最佳答案

c++ - return {} 和 return Object{} 之间的区别

这两个功能有什么明显的区别吗?structObject{Object(inti):i{i}{}inti;};Objectf(){return{1};}Objectg(){returnObject{1};} 最佳答案 第一个是copy-list-initialization,将选择合适的构造函数(即Object::Object(int))来构造返回值。第二个将通过direct-list-initialization构造一个临时Object,(也调用Object::Object(int)),然后将其复制到返回值。因为copyelisio

return 语句中的 C++ constexpr 函数

为什么constexpr函数在编译时不求值,而在运行时在main函数的return语句中求值?试过了templateconstexprintfac(){returnfac()*x;}templateconstexprintfac(){return1;}intmain(){constintx=fac();returnx;}结果是main:pushrbpmovrbp,rspmovDWORDPTR[rbp-4],6moveax,6poprbpret使用gcc8.2。但是当我在return语句中调用函数时templateconstexprintfac(){returnfac()*x;}temp