草庐IT

c++ - 编译器是否优化对常量变量的引用?

当谈到C和C++语言时,编译器是否优化了对常量变量的引用,以便程序自动知道所引用的值是什么,而不必查看常量变量的内存位置?说到数组,是否取决于数组中指向的索引值在编译时是否为常量?例如,看一下这段代码:intmain(void){1:chartesst[3]={'1','3','7'};2:charerm=tesst[1];}编译器是否在编译时将第2行“更改”为“charerm='3'”? 最佳答案 我个人希望发布的代码变成“无”,因为两个变量都没有实际使用,因此可以删除。但是,是的,现代编译器(gcc、clang、msvc等)应该

c++ - 我什么时候不需要 typedef?

遇到一些代码阅读typedefenumeEnum{c1,c2}tagEnum;typedefstruct{inti;doubled;}tagMyStruct;我听说这些结构来自C。在C++中你可以很容易地写enumeEnum{c1,c2};structMyStruct{inti;doubled;};这是真的吗?您什么时候需要第一个变体? 最佳答案 首先,这两个声明在C和C++中都是合法的。但是,在C中,它们的语义略有不同。(特别是,您稍后引用该结构的方式会有所不同)。要理解的关键概念是,在C中,结构存在于单独的命名空间中。所有内置类

c++ - 如何让 FindFirstFile 对文件进行排序

我正在使用标准的FindFirst和FindNext来检索目录中的所有文件但我需要对结果进行排序(按照与在资源管理器中单击名称列基本排序相同的顺序)我怎样才能做到这一点这必须通过Win32完成谢谢 最佳答案 您可以使用IndexingService为此,但我建议您在使用FindFirstFile时自己处理排序。无法使用FindFirstFileWin32API进行排序。有稍微高级一点的FindFirstFileEx,但即使这样也不允许排序。有个陈峰postonTheOldNewThingaboutFindFirstFile'slim

c++ - 在 C++ 中初始化数组

我看到的每个地方都有人大声争论未初始化的变量是不好的,我当然同意并理解为什么——但是;我的问题是,是否存在您不想这样做的情况?例如取代码:chararrBuffer[1024]={'\0'};将整个数组设为NULL是否会对性能产生影响,而不是使用数组而不初始化它? 最佳答案 我假定堆栈初始化,因为静态数组是自动初始化的。G++输出charwhatever[2567]={'\0'};8048530:8d95f5f5fffflea-0xa0b(%ebp),%edx8048536:b8070a0000mov$0xa07,%eax80485

c++ - 从 float 转换为 QByteArray

在QByteArray中,是否有快速的方法将浮点值转换为字节方式(十六进制)表示形式?在使用数组之前用memcpy()做了类似的事情,但这似乎不太适用于QByteArray。例如:memcpy(&byteArrayData,&floatData,sizeof(float));可以用另一种方式很好地使用:float*value=(float*)byteArrayData.data();我只是实现了这个错误还是有更好的方法使用Qt来实现?谢谢 最佳答案 来自QByteArrayClassReference页:floatf=0.0f;QB

c++ - 返回字符数组求和的结果

最近在一次采访中,我被问到一个问题,要编写一个将两个字符数组(整数)作为输入并返回输出字符数组的函数。函数签名:char*find_sum(char*a,char*b)如何解决这个问题?示例场景:find_sum("12345","32142")="44487"注意:位数可以很多(1-100)。 最佳答案 您可以使用字符数组方法添加大量数字。但是你需要在每次使用后删除char*或使用一些智能指针。char*find_sum(char*a,char*b){intlenA=strlen(a),lenB=strlen(b);intmax=

c++ - 有人在处理 2038 time_t 错误吗?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Whatshouldwedotopreparefor2038?我指的不是抽象的“人”。我的意思是你正在做任何事情吗?如果是的话是什么?我是一名古老的程序员,记得我在70年代后期编写COBOL时对我团队中的其他人说“你知道-这在2000年是行不通的”。对此的答复是“是的,但到那时该系统不会被使用,那是25年之后”。2038年还有28年。

c++ - 使 char 函数参数为 const?

考虑这个函数声明:intIndexOf(constchar*,char);其中char*是一个字符串,char是要在字符串中查找的字符(如果未找到char则返回-1,否则返回其位置)。使char也const有意义吗?我总是尝试在指针参数上使用const,但当按值调用某些内容时,我通常会不使用const。你有什么想法? 最佳答案 假设您不打算调整任一参数的值:我会将函数定义为:intIndexOf(constchar*const,constchar){//...}但保留函数声明为:intIndexOf(constchar*,char)

c++ - C 到 C++ : Transitioning from one language to the other

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:C++tutorialforexperiencedCprogrammer.我经常使用多种语言进行编程,最近一直在使用C++。基本上我的类只是对纯C代码的包装。几乎就像一个带有关联方法的结构。这为我的数据提供了我想要的封装和隐私。我有一个小的类层次结构,几乎没有使用继承。我熟悉面向对象的概念,并且知道当我需要了解这方面的特定概念时可以使用哪些搜索词。然而,正如我在编程世界中的尝试所发现的那样,通常真正有用的语言特性对新手或新手来说是隐藏的,而我需要的有用的部分已经写好了并且在某个地方的库中可以免费使用可用(大多

c++ - 使用 %s 格式化时 # 的作用是什么

我遇到了这个断言示例,想知道#的用途:#defineASSERT(x)if(!(x)){\int*p=NULL;\DBGPRINTF("Assertfailed:[%s]\r\nHalting.",#x);\*p=1;\} 最佳答案 它是“stringize”预处理操作符。它将标记作为参数传递给宏参数x并将它们转换为字符串文字。#defineASSERT(x)#xASSERT(abcd)//isreplacedby"abcd" 关于c++-使用%s格式化时#的作用是什么,我们在Stack