草庐IT

new_strings

全部标签

c++ - new[] 表达式不遵守 Microsoft VC++ 中的对齐方式

如果使用new[]表达式来创建具有析构函数的对象数组,数组中的对象可能没有正确对齐#include#include#pragmapack(8)structA{int64_ti;chardummy;~A(){}};intmain(){A*pa=newA[2];printf("sizeof(A)=%d,pointer=%p",sizeof(A),pa);}(我用VC++2010express构建32位目标)输出(在我的电脑上)是:sizeof(A)=16pointer=00344f4c(sizeof(A)=16表明编译器理解A的对齐要求并且该结构用7个字节填充[编辑:__alignof(A

c++ - C++中 "new_handler"除了垃圾回收还有什么用?

C++程序可以定义和设置new_handler(),如果无法分配请求的内存,则应从内存分配函数(如operatornew())调用该函数。自定义new_handler()的一个用途是dealingwithC++implementationsthatdon'tthrowanexceptiononallocationfailure.另一种用途是在实现垃圾收集的系统上启动垃圾收集。自定义new_handler()还有哪些其他用途? 最佳答案 与垃圾收集应用程序类似,您可以使用新的处理程序来释放您可能保留的任何缓存数据。假设您正在缓存从磁盘

c++ - 警告 C4172:返回对绑定(bind)到局部变量的 const std::string 的引用。它有多安全?

我刚刚在工作中构建我们的一个项目,我看到添加了一个新功能:conststd::string&ClassName::MethodName()const{return"";}编译器给出警告:WarningC4172:returningaddressoflocalvariableortemporary我认为编译器是对的。这个函数的安全性如何?请注意,该函数不会返回constchar*,这没有问题,因为字符串文字具有静态存储持续时间。它返回对conststd::string的引用 最佳答案 是的,它不安全。返回局部变量或临时变量的地址并取消

C++初阶:C/C++内存管理、new与delete详解

之前结束了类与对象:今天进行下面部分内容的学习文章目录1.C/C++内存分布2.C语言中动态内存管理方式:malloc/calloc/realloc/free3.C++动态内存管理方式3.1new/delete操作内置类型3.2new和delete操作自定义类型4.operatornew与operatordelete函数5.new和delete的实现原理5.1内置类型5.2自定义类型6.定位new表达式(placement-new)7.知识点梳理malloc/free和new/delete的区别1.C/C++内存分布具体说明:栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。栈

c++ - 在 C++ 中,在创建对象时,隐式使用 new 吗?

当我创建一个类的对象时,比如说,classA{public:A(){}};Aa;是否只调用了构造函数?还是隐式使用了new运算符?就像我们必须做的那样A*b=newA();另外,a和b在内存中的存储位置?栈还是堆? 最佳答案 第一种情况,如果a不是全局变量,那么它会被放入栈中,而b会被放入堆中。在第一种情况下,只调用了构造函数。new永远不会被调用,除非您像第二种情况那样明确地执行它。 关于c++-在C++中,在创建对象时,隐式使用new吗?,我们在StackOverflow上找到一个类

vue前端判断某一个String类型的集合中是否包含某一个字符串怎么做

vue前端判断某一个String类型的集合中是否包含某一个字符串怎么做可以使用JavaScript中的字符串方法includes()来判断某一个字符串是否包含在另一个字符串中。具体的实现方法如下:conststrList=["hello","world","vue"];//假设这是一个字符串类型的集合consttargetStr="vue";//假设这是需要判断是否包含的字符串if(strList.includes(targetStr)){console.log("字符串集合中包含目标字符串");}else{console.log("字符串集合中不包含目标字符串");}在上面的代码中,我们使用

c++ - 当字符串可以是大写或小写时,C++ 中是否有用于 std::string 的内置函数来按字母顺序比较两个字符串?

我知道对于C++,如果两个词完全小写或完全大写,基本的比较运算符就可以完成任务。我有一个字符串数组,字母可以从低到高变化。这是我可以使用的字符串类型的一个小示例:“丰盛的生命”“新生命WMNMNSTRY”“新生活大会”我知道在Java中存在函数String.compareToIgnoreCase().是否有此函数的C++等效项? 最佳答案 我不知道标准库中有任何不区分大小写的函数,但您可以为std::equal指定自定义谓词:std::stringa("hello");std::stringb("HELLO");std::cout有

c++ - 为什么不能将一个 int(代表一个 ASCII 字符)转换为一个 std::string 而不用花括号包裹 int?

intmain(){std::stringA;A+=(std::string)65;std::cout上面的代码不起作用。它会引发编译器错误。但是下面的代码有效。intmain(){std::stringA;A+=(std::string){65};std::cout当我将65括在大括号中时,它被解释为我想要的ASCIIA,但没有大括号,程序将无法运行。我还尝试将多个数字放在大括号中,如下所示:intmain(){std::stringA;A+=(std::string){65,66};std::cout这将打印出AB。我只希望有人能为我解决这个问题。 最佳

c++ - 标准模板字符串类 : string. fill()

我需要一种方法来创建一个包含n个字符的字符串。在这种情况下,ascii值为零。我知道我可以通过调用构造函数来做到这一点:字符串sTemp(125000,'a');但我想在很多地方重用sTemp并用不同的长度填充它。我正在调用一个以字符串指针和长度作为参数并用字节填充字符串的库。(我知道从技术上讲,字符串不是连续的,但就所有意图和目的而言,它是连续的,并且很快就会成为标准)。我不想使用vector。有没有什么巧妙的方法可以在创建字符串后再次调用构造函数? 最佳答案 string类提供了方法assign来为给定的字符串分配一个新值。签名

c++ - 为什么不是 std::string::max_size() == std::string::allocator::max_size()

最近我注意到给定std::strings的情况下以下陈述不正确.s.max_size()==s.get_allocator().max_size();我发现这很有趣,默认情况下std::string将使用std::allocator其理论极限为size_type(-1)(是的,我知道我假设2的补码,但这与实际问题无关)。我知道实际限制会比这少得多。在典型的32位x86系统上,内核将占用2GB(可能是1GB)的地址空间,实际上限要小得多。无论如何,GNUlibstdc++的std::basic_string::max_size()似乎返回相同的值,不管它使用的分配器说什么(类似于1073