草庐IT

C++标准

全部标签

c++ - 是否有任何 C 或 C++ 标准识别内存映射文件的存在?

我只是想知道是否可以在可移植的C或C++中使用内存映射文件。我认为不是,因为据我所知没有标准承认内存映射文件的存在。使用内存映射可以在两个地址处拥有相同的字节。另外,我认为如果不首先在那里构造一个对象,甚至不可能使用一block内存(通过char*除外)。因此,如果我们想将现有的映射文件视为一个整数数组,这应该是未定义的行为。那么内存映射文件和标准是什么情况呢? 最佳答案 他们没有。内存映射通常由操作系统提供:C和C++也可以在没有内存映射的情况下运行。将这种可用性强加于语言目标平台的范围将是非常有限的。在独立环境中也可能根本不支持

c++ - HAVE_* 宏的目的是什么?

我在CMake项目中重用autotools项目的一些C/C++源文件,我看到许多源文件散落着如下行:#ifdefHAVE_UNISTD_H#include//forgetpid()#endif如果getpid()是可选的并且它的调用被等效的HAVE_UNISTD_H指令包围,我会理解这个构造的目的。但是,如果没有HAVE_UNISTD_H,源文件不会编译,并提示getpid()未定义。这感觉比编译器让我知道未找到unistd.h要神秘得多。当然,这只是一个例子。其他流行的宏包括HAVE_STDINT_H、HAVE_INTTYPES_H等,它们的存在是编译源文件所必需的。为什么要包含HA

STM32的标准库与HAL库学习——以F407为例(一)架构与时钟

一、前言 本系列是我在寒假对单片机的一次再学习,用于梳理知识。本次学习以应用为导向,不会涉及太多外设,如有错误,欢迎指正。二、标准库与HAL库 对单片机的操作,归根结底是对寄存器的操作。 但想要实现一个功能,使用寄存器是十分繁琐的,而且寄存器的种类数量十分之多,学51时还可以记,32有几百个寄存器,这是记不完的。于是ST公司将寄存器的底层操作封装起来,作为一个个函数。在大多数情况下,我们不需要去管寄存器,调用函数即可。这就是标准库。 如下是将引脚电平置低的库函数,可以看到对寄存器的写入。voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin

java - System.out、stdout 和 cout 是一回事吗?

System.out、stdout和cout在Java、C和C++中分别是完全相同的东西吗?为什么同一事物有三个不同的名称(尤其是当C、C++和Java有很多共同点时)?此外,我知道它们的用途,但我的意思是,它们到底是什么? 最佳答案 cout本质上与stdout相同但不同的是cout类型为ostream(这实际上意味着您可以使用输入格式化数据或使用write方法输入未格式化数据。stdout附加到文件描述符(标准输出是FILE*)。stdout文件描述符是1.因为它返回对文件描述符的引用,所以可以在fputs中使用和fprintf

c++ - 我可以确定 char * 参数寻址了多少有效内存吗?

我有这样的功能://stringisanull-terminatedchararray.ReplaceallainthestringwithbvoidReplaceCharInString(char*string,chara,charb){//loopoverthestringcharbychar,tofindall"a"sandreplacethemwith"b"}我正在做防御性编程。问题是客户端的实现回复真正传递了一个字符数组。如果传入单个字符的地址,程序肯定会进入错误状态(可能会崩溃)。我该如何检查并避免这种情况?(我知道如果我传入std::string对象,问题当然就消失了)

c++ - 标准转换 : Array-to-pointer conversion

这是来自ISO的要点:标准转换:数组到指针的转换:$4.2.1Anlvalueorrvalueoftype“arrayofNT”or“arrayofunknownboundofT”canbeconvertedtoanrvalueoftype“pointertoT.”Theresultisapointertothefirstelementofthearray.谁能解释一下,如果可能的话,用一个示例程序。我已经看过这些链接,但我无法理解:ArrayandRvalueIthinkImayhavecomeupwithanexampleofrvalueofarraytype

c++ - 返回标准容器会导致容器内容的拷贝吗?

如果我有一个返回STL容器的函数,我是否会得到标准容器全部内容的拷贝?例如这是:voidFoo(std::vector*string_list);比这更好:std::vectorFoo();容器里装的东西重要吗?例如会返回这样的容器:structbuzz{inta;charb;floatc;}std::mapFoo();比这更昂贵的操作:std::mapFoo();谢谢,保罗H编辑:这是C++03。遗憾的是,C++0x解决方案是NotAcceptable。编辑2:我正在使用MicrosoftVisualStudio2008编译器。 最佳答案

c++ - 谁能解释一下当前C++0x标准草案的这一段?

谁能解释ISON3242§3.2第2点中的这个陈述Amemberofasetofcandidatefunctionsisodr-usedifitisselectedbyoverloadresolutionwhenreferredtofromapotentiallyevaluatedexpression.[Note:Thiscoverscallstonamedfunctions(5.2.2),operatoroverloading(Clause13),user-definedconversions(12.3.2),allocationfunctionforplacementnew(5.3

c++ - 现在的 C 和 C++ 编译器的线程保证是什么?

我想知道编译器做出什么保证来确保对内存的线程写入在其他线程中具有可见的效果。我知道有无数个案例存在这个问题,我敢肯定,如果您有兴趣回答这个问题,您也知道,但请关注我将要介绍的案例。更准确地说,我担心会导致线程丢失其他线程完成的内存更新的情况。我不在乎(在这一点上)更新是非原子的还是同步不良:只要相关线程注意到更改,我就会很高兴。我希望编译器能够区分两种变量访问:访问必须有地址的变量;访问不一定有地址的变量。例如,如果您采用此代码段:voidsleepingbeauty(){inti=1;while(i)sleep(1);}因为i是本地的,我假设我的编译器可以优化它,让睡美人永远沉睡。v

c++ - 使用标准输入重定向输入

我正在编写一个短程序来对整数数组进行排序。我在打开输入文件“prog1.d”时遇到问题。作业要求在程序目录中创建符号链接(symboliclink),我在创建对象和可执行文件后,按如下方式调用程序...prog1.exeprog1.out我知道我的冒泡排序正确且高效地工作,因为我使用了我自己的测试“txt”文件。作业说:Yourprogramgetstherandomintegersfromstdinandputstheminanarray,sortstheintegersinthearrayinascendingorder,andthendisplaysthecontentsofth