草庐IT

C++标准

全部标签

c++ - 您如何处理标准库中的 signed char -> int 问题?

这是我工作中长期存在的问题,我意识到我仍然没有好的解决方案......C天真地为一个int定义了它所有的字符测试函数:intisspace(intch);但是char通常是带符号的,并且完整的字符通常不适合int或用于字符串的任何单个存储单元******。而这些函数已经成为当前C++函数和方法的逻辑模板,为当前的标准库奠定了基础。事实上,他们仍然受到支持,afaict。因此,如果您使用isspace(*pchar),您最终可能会遇到符号扩展问题。它们很难被发现,因此根据我的经验,它们很难防范。同样,因为isspace()和它的同类都采用整数,并且因为字符的实际宽度通常在没有字符串分析的

c++ - 线程环基准

今天我正在做ProgrammingErlang一书中的线程环练习,并在谷歌上搜索其他解决方案以进行比较。我发现语言枪战与benchmark有完全相同的问题。.我的印象是这是Erlang应该很快的领域,但事实证明C和C++再次领先。我怀疑C/C++程序没有遵循“将token从一个线程传递到另一个线程”的规则。在阅读它们之后,它们似乎都操作了一些共享内存和全局变量,这与Erlang代码不同,但我可能是错的。我的问题是:它们是在做同样的事情,还是C/C++代码在概念上与Erlang不同(而且速度更快)?还有一个问题:当解决方案非常相似时,为什么Haskell比Erlang更快?

Stm32_标准库_14_串口&蓝牙模块_解决手机与蓝牙模块数据传输的不完整性

由手机向蓝牙模块传输时间信息,Stm32获取信息并将已存在信息修改为传入信息测试代码:#include"stm32f10x.h"//Deviceheader#include"Delay.h"#include"OLED.h"#include"Serial.h"uint16_tnum=0;TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;NVIC_InitTypeDefNVIC_InitStructure;charNews[100]="";uint8_tflag=1;/*初始化通用定时器TIM2*/voidTimer_Init(void){ RCC_

c++ - C 和 C++ 中整数/算术类型的大小保证

我知道C++标准明确保证只有char、signedchar和unsignedchar的大小。它还保证,比方说,short至少和char一样大,int和short一样大等。但没有明确保证绝对值,比如说,sizeof(int)。这是我脑海中的信息,我快乐地生活着。然而,前段时间,我在SO中看到一条评论(找不到),在C中long保证至少为4个字节,并且C++“继承”了该要求。是这样吗?如果是这样,我们对C++中算术类型的大小还有哪些其他隐式保证?请注意,我对这个问题中不同平台的实际保证绝对不感兴趣,只是理论。 最佳答案 18.2.2保证与

c++ - 为什么 C++ 不使用 C++ 元素/样式重新实现 C 标准函数?

对于一个具体的例子,考虑atoi(conststd::string&)。这非常令人沮丧,因为我们作为程序员需要经常使用它。更普遍的问题是,为什么C++标准库不使用C++字符串、C++vector或其他C++标准元素重新实现标准C库,而不是保留旧的C标准库并强制我们使用旧的char*接口(interface)?它非常耗时,并且在这两个接口(interface)之间转换数据类型的代码不容易优雅。是否出于兼容的原因,考虑到遗留的C代码比现在多得多,保留这些C标准接口(interface)会使从C代码到C++的转换更容易?另外,听说很多C++可用的库对STL做了很多增强和扩展,请问有库支持这些

c++ - 指针减法和替代方案

在处理数组时,标准算法(在C和C++中)通常返回指向元素的指针。有时拥有元素的索引很方便,也许可以索引到另一个数组,我通常通过从指针中减去数组的开头来得到它:intarr[100];int*addressICareAbout=f(arr,100);size_tindex=addressICareAbout-arr;这似乎总是足够简单和有效。然而,最近有人向我指出,指针减法实际上返回一个ptrdiff_t,原则上,如果“index”不适合,可能会出现问题一个ptrdiff_t。我真的不相信任何实现都足以允许一个人创建如此大的arr(从而导致此类问题),但公认的答案here承认这是可能的,

c++ - MSVC 用 double 支撑初始化似乎违反了标准?

看看这个简单的程序:intmain(){floatf2=7.2;//OK,withwarningfloatf3=7.199999809265137;//OK,nowarningfloatf4{7.2};//Failsfloatf5{7.199999809265137};//OK,nowarningfloatf6={7.2};//Failsfloatf7={7.199999809265137};//OK,nowarning}当使用默认选项(cl/W4,版本19.00.23918)使用MSVC2015编译时,我收到以下消息:FloatTest.cpp(2):warningC4305:'in

c++ - 可以打开小的 ASCII 文件,但不能打开大的二进制文件吗?

我正在使用以下代码在Windows上的MSVC中打开一个大型(5.1GB)二进制文件。机器有足够的内存。问题是长度被检索为零。但是,当我将file_path更改为较小的ASCII文件时,代码可以正常工作。为什么我无法加载大型二进制文件?我更喜欢这种方法,因为我想要一个指向文件内容的指针。FILE*pFile;uint64_tlSize;char*buffer;size_tresult;pFile=fopen(file_path,"rb");if(pFile==NULL){fputs("Fileerror",stderr);exit(1);}//obtainfilesize:fseek(

c++ - CMake - 自动解析预编译头的依赖关系?

到目前为止,至少据我所知,在CMake中没有标准的方法来指定以跨平台的方式向项目添加预编译头(PCH),因为C++编译器处理PCH的方式是供应商之间差异很大。对于G++,这通常是通过简单地添加一个自定义命令来解决的,该命令负责使用适当的输入调用编译器并让它生成PCH。我现在的问题是CMake不会解析你为自定义命令指定的依赖项的依赖项。例如,假定以下结构:pch.h|-dependA.h|-dependB.h...仅提供pch.h作为依赖项将导致在相应的makefile中生成适当的目标,它跟踪对pch.h。但是,CMake不解析insidepch.h的包含,因此不会识别对dependA.

c++ - 为什么 C++ 标准没有提到 __STDC_IEC_559__?

根据C++11标准[c.math],header与标准C库header相同.(当然,有几个区别,---命名空间,重载等---但这些在这里可以忽略。)根据C99标准附件F,“定义__STDC_IEC_559__的实现应符合附件F中的规范”。例。atan2如果两个参数都为零,可能会导致域错误,但如果__STDC_IEC_559__则一定不会已定义。在C99中,很多行为也依赖于是否__STDC_IEC_559__是否定义。但是,似乎__STDC_IEC_559__在C++11标准的任何地方都没有提到。如果是,C++实现是否符合附件F中的规范?我认为std::numeric_limits::i