草庐IT

C++标准

全部标签

c++ - 为什么 C 编译器不能以直观的方式进行有符号/无符号比较

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。“直觉”是指给定的inta=-1;unsignedintb=3;表达式(a应该评估为1。Stackoverflow上已经有许多问题询问为什么在这种或那种特定情况下C编译器提示有符号/无符号比较。答案归结为整数转换规则等。然而,在比较有符号整数和无符号整数时,为什么编译器必须如此异常愚蠢,似乎没有理由。使用上面的声明,为什么表达式像(a不会自动替换为(a如果

c++ - 快速 C++ 字符串输出

我有一个程序可以从FPGA输出数据。由于数据变化非常快,我试图提高程序的速度。现在我正在打印这样的数据for(inti=0;i我发现使用一个printf大大提高了速度printf("data:%d\ndata:%d\ndata:%d\n",getData(1),getData(2),getData(3));但是,如您所见,它非常困惑,我无法使用for循环。我尝试先使用sprintf连接字符串,然后一次打印所有内容,但它和第一种方法一样慢。有什么建议吗?编辑:我已经先打印到一个文件,因为我意识到控制台滚动会是一个问题。但还是太慢了。我正在为外部FPGA调试内存Controller,因此越

c++ - C++11 是否支持 C11 的新特性?

我最近在C11中进行了探索,许多新功能使我可以更轻松地使用C编写代码。我想知道C++11是否正式支持所有这些功能。我关心的不是实现或编译器问题,而是新的C++标准。 最佳答案 不,C++11不支持C11的所有特性。它甚至不支持C99的所有功能。例如,可变长度数组是在C99中引入的,但C++尚不支持它们。参见thisquestion了解详情。 关于c++-C++11是否支持C11的新特性?,我们在StackOverflow上找到一个类似的问题: https://

c++ - C stdio 字符编码

对于我的宠物项目,我正在试验字符串表示,但我得出了一些令人不安的结果。首先,这是一个简短的应用程序:#include#include#includevoidwrite_to_file(FILE*fp,constchar*c,size_tlen){void*t=(void*)c;fwrite(&len,sizeof(size_t),1,fp);fwrite(t,len,sizeof(char),fp);}intmain(){FILE*fp=fopen("test.cod","wb+");constchar*ABCDE="ABCDE";write_to_file(fp,ABCDE,strl

c++ - 为什么C++标准队列有back函数,stack没有bottom函数?

在许多非官方C++引用网站之一上,列出了std::queue的成员函数front()和back().然而,std::stack只有top()函数。堆栈没有bottom()函数是有意义的,因为那是堆栈的定义。我不明白的是,为什么C++标准委员会选择不遵循队列的定义并为队列提供back()函数,而选择遵循堆栈的定义并且不提供bottom()函数。 最佳答案 back()可能还有其他原因,但您需要它来创建队列,因为C++03的习惯用法是廉价地将“空”对象复制到容器中,然后swap将新元素与复制成本非常高的“完整”对象交换。由于移动语义,这

c++ - 使用自己的标准库在 C++ 中扫描文件

我想知道或获得线索如何在C++中使用其自己的标准库搜索目录,或者看看是否可行。目前我已经找到了几种搜索目录的解决方案,但它们都使用了一些外部库,例如这个SO问题:recursivefolderscanninginc++我们应该如何处理这个问题? 最佳答案 C++标准中没有文件系统设施。它有一个技术规范,可能会包含在未来的C++版本中。在那之前,您将不得不使用特定于平台的函数或包装它们的库。显然新提案与boost的API几乎相同,所以我建议使用boost,即使它的普遍性还不够好。 关于c+

c++ - C++ 程序中的文字 "or"?

这个问题在这里已经有了答案:Whenwerethe'and'and'or'alternativetokensintroducedinC++?(8个答案)关闭8年前。当我注意到我的C++代码包含以下几行时,我正在将前段时间编写的C++函数翻译成Python:if(MIsScaledOut()){if(DataType()==UnknownDataTypeorDataType()==h)Descriptor=Descriptor+DataTypeString()+"OverM";那里有一个或!这可能是因为我之前是从python翻译过来的,忘记切换到||。此代码可在各种操作系统和各种编译器中

c++ - Mac OS X 10.6.8 上的 gcc-4.2.1 中不存在 strnlen - 如何定义它?

我正在构建最新dcraw.c的跨平台OSX版本我在OSX10.6.8上执行此操作以获得PPC兼容性。现在我的问题是strnlen似乎在最新版本的程序中使用,它在10.6.8上不存在,gcc给我这样的消息:Undefinedsymbolsforarchitecturei386:"_strnlen",referencedfrom:...Undefinedsymbolsforarchitectureppc:"_strnlen",referencedfrom:...所以,我只想定义strnlen,但不太清楚如何定义。问:任何人都可以提供strnlen的工作定义以在dcraw.c中使用吗?顺便说

c++ - 编译为 C++ 但不是 C(错误 : lvalue required as unary '&' operand)

当我使用C++而不是C时,这一行编译:gmtime(&(*(time_t*)alloca(sizeof(time_t))=time(NULL)));//用alloca创建一个左值我对这种差异感到惊讶。甚至没有针对C++的警告。当我指定gcc-xc时,消息是:playground.cpp:25:8:error:lvaluerequiredasunary'&'operandgmtime(&(*(time_t*)alloca(sizeof(time_t))=time(NULL)));^这里的&不就是一个address-of操作符吗?为什么在C和C++中不同?虽然我可以在C中使用复合字面量,但

c++ - 在非函数调用相关声明上使用 "extern C"

我知道之前有人问过有关extern"C"的问题,但我收到的信号很复杂,希望有人能指出以下场景中的最佳实践。我已经为Linux编写了一个驱动程序,并定义了几个struct以及一些_IO、_IOR和_IOWioctl(...)调用的定义。我的结构都不包含任何函数,下面是我使用的struct、enum和ioctl示例:#ifdef__cplusplusextern"C"{#endifenumAlignment{Left=0,Right=1,Middle=3};structData{intSize;void*Address;};#definefoo_IOR(DRV_ID,1,structDat