我经常有一些类,它们大多只是一些STL容器的包装器,如下所示:classFoo{public:typedefstd::vectorVec;typedefVec::size_typesize_type;constVec&GetVec(){returnvec_;}size_typesize(){returnvec_.size()}private:Vecvec_;};我不太确定返回size_type。通常,某些函数会调用size()并将该值传递给另一个函数,另一个函数将使用它并可能传递它。现在每个人都必须包含那个Fooheader,虽然我实际上只是传递一些大小值,无论如何它应该只是unsig
这可能是一个C++101问题:我很好奇使用size_t和offset_t的指南是什么,例如它们用于什么情况,它们不用于什么情况,等等。我没有做过很多可移植的编程,所以我通常只使用int或unsignedint这样的东西用于数组大小、索引等。但是,我发现最好尽可能使用这些更标准的typedef,所以我想知道如何正确地做到这一点。作为后续问题,对于使用VisualStudio2008在Windows上进行开发,我应该在哪里寻找实际的typedef?我发现size_t在VS安装目录中的许多header中定义,所以我不确定我应该使用哪一个,而且我找不到offset_t任何地方。
我在学习C++时遇到了以下问题。我只是一个初学者,我很困惑。sizeof()函数不应该返回数据类型的大小吗?为什么数据对象的大小可能与其sizeof()不同?我不明白答案的解释。假设在一台假想的机器中,char的大小是32位。sizeof(char)会返回什么?一)4b)1c)依赖于实现d)机器相关答案:b说明:标准不要求char为8位,但确实要求sizeof(char)返回1。 最佳答案 sizeof运算符以bytes为单位生成类型的大小,其中字节定义为char的大小。所以根据定义,sizeof(char)始终为1,无论bitsc
在raspberrypi-arv7l上,我正在编译以下C++程序#includevoidfun(unsignedlongint*i){std::cout对于上面的代码,我收到以下错误:a.cpp:Infunction'intmain()':a.cpp:12:9:error:invalidconversionfrom'std::size_t*{akaunsignedint*}'to'longunsignedint*'[-fpermissive]fun(&i);^~a.cpp:3:6:note:initializingargument1of'voidfun(longunsignedint*
以下代码在Clang中编译良好并输出int[3]数组的大小#includeintmain(){constint(&a)[]={1,2,3};std::cout但是,在GCC中,声明编译得很好,但是sizeofa没有:显然GCC拒绝“推断”数组大小并以a作为结尾对constint[]类型的引用,该类型不完整。此类初始化的预期行为是什么?9.3.4/3似乎是此类情况下标准的相关部分,但它本身似乎并不能最终回答这个问题。 最佳答案 标准在这一点上并不完全清楚,我认为GCC的解释很可能是WG21的意图,但我不确定。标准的相关部分是[dcl.
在std::list中,max_size()函数中的最大大小是如何计算的?现在我意识到这取决于实现,但假设我是制作标准库的人。我将如何确定可移植的特定类型T的list的最大限制? 最佳答案 它几乎总是N的最大值,其中容器最多可以有N个元素。这几乎总是意味着所讨论平台上无符号整数类型的最大值除以要存储在容器中的元素类型的大小。 关于c++-std::list中的max_size()函数如何计算最大尺寸?,我们在StackOverflow上找到一个类似的问题: h
我已经编写了一个类来处理命名管道连接,如果我创建了一个实例,关闭它,然后尝试创建另一个实例,调用CreateFile()返回INVALID_HANDLE_VALUE,并且GetLastError()返回ERROR_PIPE_BUSY。这里发生了什么?我该怎么做才能确保对Connect()的调用成功?PipeAsyncA,B;A.Connect("\\\\.\\pipe\\test",5000);A.Close();cout这是我对Connect()和Close()的实现BOOLPipeAsync::Connect(LPCSTRpszPipeName,DWORDdwTimeout){th
我正在为我的游戏开发项目制作一个非常小的游戏内GUI库,但我无法找到一种干净的处理焦点的方法。我的库支持嵌套的列表框和小部件层次结构,但我似乎无法找到一种方法来防止在处理小部件焦点时出现奇怪的行为。示例表单:|------------||Form[X]||------------||||[Button01]||||[List1][v]||||[Button02]||||------------|我的设计有一个Context对象,它存储一个Widget对象列表。Widget可以有任意数量的child。我可以递归地迭代Widget的所有子级/父级。我目前的焦点逻辑是:如果上下文很忙(拖动、
我定义了一个函数:voidmyfunc(size_tparam1,size_tparam2){...}它工作正常。但是当我尝试重载这个函数时voidmyfunc(unsignedlongparam1,unsignedlongparam2){...}编译失败,提示如下:错误:无法重载myfunc(unsignedlongparam1,unsignedlongparam2)。如何在不将输入参数静态转换为size_t的情况下解决这个问题?谢谢! 最佳答案 听起来size_t和unsignedlong在您的系统上是同一类型;编译器提示你有两
我了解哈希表的数学基础。我在下面有一个哈希函数(我在某处找到的):/*Fowler/Noll/Vo(FNV)Hash*/staticconstsize_tInitialFNV=2166136261U;staticconstsize_tFNVMultiple=16777619;size_tmyhash(conststring&s,intlength){size_thash=InitialFNV;for(size_ti=0;i为什么返回size_t?如何使用它来编写一个store()函数放置一个哈希表中的字符串?这如何适用于数组字符?关于#3,更换是否合适for循环和一个while循环在'