草庐IT

SAVE_STACK_POINTER

全部标签

c++ - 如何从 std::array<T, N>::pointer 成员/依赖类型中推断出数组大小?

我的目标是为strcpy编写安全的替代品对于在编译期间已知目标缓冲区大小的情况,我希望推断出缓冲区大小,因此用户不需要知道它。例如:charxs[2]={0};strcpy(xs,"abc");//bufferoverflow!printf("[%s]\n",xs);此输出(希望)是:[abc]对于简单的情况,当传递C风格的数组时,可以毫不费力地写成:templatechar*safe_strcpy(char(&dst)[N],constchar*src)noexcept{std::snprintf(dst,N,"%s",src);return&dst[0];}推导出数组的大小,snp

c++ - 如何编译以减少内存/STACK 似乎没有任何改变?

我创建了很多不需要任何内存的简单程序,但它们在任务管理器的私有(private)内存栏中总是显示大约1MB-1.6MB内存。我读到与link.exe链接的默认堆栈大小为1MB,我试过像这样使用/STACK:/STACK:65536(64kb)/STACK:16777216(16mb)当我运行程序时,内stub本没有改变..即使是这样一个简单的程序,使用1.6MB编译为64位,带有link.exe而没有库(simple.c):#includeintmain(){puts("helloworld\n");getchar();return0;}谁能告诉我如何减少简单程序的内存?我知道1mb并

【c++】STL之stack和queue详解

>作者简介:დ旧言~,目前大二,现在学习Java,c,c++,Python等>座右铭:松树千年终是朽,槿花一日自为荣。>目标:掌握stack和queue库,了解deque库>毒鸡汤:小时候,哭是我们解决问题的绝招,长大后,笑是我们面对现实的武器。>望小伙伴们点赞👍收藏✨加关注哟💕💕 🌟前言今天咱们学习stack和queue,咱们还是依照官网来学习:stack-C++Reference(cplusplus.com)queue-C++Reference(cplusplus.com)⭐主体        在数据结构初阶中,我们模拟实现了stack和queue,只能说我们知道栈和队列,但是栈和队列的底

C++ : friends of class and "this" pointer

我有一个小问题要问你:),我知道每个方法都“secret地”获取它们所在的某个类的“this”指针,但为什么“友元”函数不会发生这种情况?是因为它们不是类的方法吗?谁能解释一下整个机器,我对“这个”到底是如何工作的很感兴趣!提前致谢!:) 最佳答案 friend函数和类仅用于编译器检查的访问控制。friend函数只是标准函数,因此调用约定不会有任何差异。friend函数不是任何类的成员,因此没有传递this指针(与static成员函数一样)类的非static成员函数将得到一个隐藏this指针(根据ABI这通常是第一个参数),stat

c++ - 使用 std::stack 和 std::map 内存使用率意外高

我正在尝试遍历一棵树,以便访问4x4滑动拼图的所有可能状态。我写的算法最初是递归的,但由于(显然)非常深的树,这被证明是不可能的。它崩溃并报告了段错误。然后我决定重写算法以迭代地完成它的工作,据我所知,它工作得很好。然而,一段时间后,由于交换,它开始大幅减速。我做了一些计算,但无法弄清楚所有这些内存使用量来自哪里......代码贴在下面,但这里是重要的功能:std::stack>stackstd::mapdistanceTable假设stack的内存占用与它包含的元素数量成正比,并假设map相同(其中一个元素是pair),我打印出预期的内存占用量:cout))/(1并将输出与top的输

c++ - static_pointer_cast<Derived> pReallyABase = static_pointer_cast<Derived>(pBase) 有效!为什么?

这个问题在这里已经有了答案:Downcastingusingthe'static_cast'inC++(3个答案)关闭8年前。我不明白为什么会这样。pReallyABase是一个向下转换的shared_pointer,它指向一个基类实例。我理解为什么编译器让我调用pReallyABase->onlyForDerived()因为我将它定义为派生类指针,但是当我尝试使用该指针调用派生类函数时为什么没有出现运行时错误?classBase{public:virtualstringwhatAmI(){return"IamaBase";}};classDerived:publicBase{publ

STL---stack&&queue

一、stack1.stack的介绍stack介绍文档 https://legacy.cplusplus.com/reference/stack/stack/?kw=stack1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2.stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3.stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空

C++初阶:容器适配器介绍、stack和queue常用接口详解及模拟实现

介绍完了list类的相关内容后:C++初阶:适合新手的手撕list(模拟实现list)接下来进入新的篇章,stack和queue的介绍以及模拟:文章目录1.stack的初步介绍2.stack的使用3.queue的初步介绍4.queue的使用5.容器适配器5.1含义5.2STL标准库中stack和queue的底层结构6.模拟stack和queue文件规划和一览6.1模拟stack(stack.h)6.2模拟queue(queue.h)1.stack的初步介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配

c++ - 您可以向 union 成员发送 "pointer to member"吗?

我能找到的所有描述都在类的上下文中谈论“指向成员的指针”。union与结构非常相似,尤其是也有成员。您能否也提供指向这些成员的指针?例如unionx{inta;floatb;};intx::*p=&x::a;我不是在谈论作为一个整体的union体的指针,作为union体成员的指针等。上面示例中的p实际上是一个偏移量,显然大小为0。我需要这个构造来回答thisquestion. 最佳答案 §3.9.2/1:复合类型可以通过以下方式构造:......指向非静态50类成员的指针,它们标识给定类的对象中给定类型的成员,§8.3.3/1:在声

c++ - pointer_traits 为既不是 X<A, T...> 也没有提供成员 typedef element_type 的类型提供什么?

下面的结果是什么?它是格式错误、未定义的行为还是定义良好且格式正确的行为?structA{};std::pointer_traitsx;我之所以问,是因为好奇想知道,也想知道任意类型是不是指针。我还想包括shared_ptr和friend。我想知道是否有类型特征(谓词),如果没有,我是否可以使用pointer_traits并检测是否声明了element_type。 最佳答案 它表示从20.6.3p1开始格式错误,因为它没有element_type并且不是类模板实例化typedefseebelowelement_type;Type:P