草庐IT

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

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

c++ - 未定义行为的意义何在?

这个问题在这里已经有了答案:Undefined,unspecifiedandimplementation-definedbehavior(9个回答)关闭5年前。我可以理解保留一些已定义的实现,以便实现它的特定人员知道最好发生什么,但为什么某些事情会成为未定义的行为?为什么不直接说,还有什么是实现定义的?

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

c++ - 当您在 C 中定义一个值时,编译器如何选择数据类型

只是一个关于编程的一般问题:当您用C(或我想的任何语言)定义一个值时,编译器如何知道如何处理该值?例如:#defineCountCycle100000我假设CountCycle是一个“长整数”数据类型,但这只是一个假设。我想它也可以是float、double(不是int,因为它最大为~32k)等。编译器如何为#define值选择数据类型?我没有申请回答这个问题;我只是好奇。 最佳答案 编译器不会做这样的事情。预处理器用100000代替CountCycle。一旦替换完成,编译器就可以接管了。如果100000适合该范围,则其类型为int

c++ - 为什么 offsetof 实现在 C 和 C++ 上有奇怪的不同?

我打开了stddef.h并看到了这个:#ifdefined_MSC_VER&&!defined_CRT_USE_BUILTIN_OFFSETOF#ifdef__cplusplus#defineoffsetof(s,m)((size_t)&reinterpret_cast((((s*)0)->m)))#else#defineoffsetof(s,m)((size_t)&(((s*)0)->m))#endif#else#defineoffsetof(s,m)__builtin_offsetof(s,m)#endif在__cplusplus的分支中(如果是C++编译器)有一个非常奇怪的实现,

c++ - 有没有办法在 GCC 中禁用内联汇编程序?

我正在为LeetCode、Codeforces等编程竞赛开发一个在线评委系统。对于大多数编程竞赛,C/C++中不允许使用内联汇编程序,因此我想在我的系统中添加相同的限制。我想让GCC和G++在编译包含内联汇编的C/C++程序时产生错误,这样任何包含内联汇编的代码都会导致编译错误。有办法实现吗?我应该将一些命令行参数传递给GCC/G++吗?注意:禁用内联汇编只是为了遵守规则,而不是出于安全考虑。 最佳答案 有没有办法在GCC中禁用内联汇编程序?是的,有几种方法。在编译器中关闭汇编要在编译阶段执行此操作,请使用参数-fno-asm。但是

c++ - 复制整数位的最快方法

复制整数位的最快方法是什么。例如,17->10001复制后:1100000011 最佳答案 看起来像是位交错的变体。Interleavebitstheobviousway(modifiedfromhttp://graphics.stanford.edu/~seander/bithacks.html)unsignedintx=17;unsignedintz=0;//zgetstheresultingMortonNumber.for(inti=0;i参见http://graphics.stanford.edu/~seander/bith

c++ - Web 服务器端应用程序的 NTLM 身份验证

我用C++编写的基于Windows的应用程序(基本上是一个HTTP/1.1代理服务器)监听来自不同用户的请求。目前它能够发送407BasicChallenge,并处理来自Headers的响应。我知道我必须修改质询header,以便客户端浏览器做出基于NTLM的响应以进行身份​​验证。但我的问题是-如何为407身份验证质询生成正确的token、随机数等,然后如何验证收到的响应是否正确?最后,如果可能的话,我想记录客户的用户名和其他LDAP/ADS属性。请善待,如果已经有讨论类似内容的主题,请将我重定向到正确的帖子。对WWW的大多数研究只将我引向客户端编程,很少或几乎没有-对于必须在HTT

c++ - 我可以期望我从文字常量设置的浮点变量值在分配给其他变量后不变吗?

如果我这样做:floata=1.5f;floatb=a;voidfunc(floatarg){if(arg==1.5f)printf("Youaretehawresome!");}func(b);文本是否每次(以及在每台机器上)打印?编辑我的意思是,即使我没有进行任何计算,我也不确定该值是否会在某个时候通过FPU,如果是这样,FPU是否会更改该值的二进制表示形式。我在某处读到,(近似)相同的浮点值在IEEE754中可以有多个二进制表示。 最佳答案 首先,1.5可以准确地存储在内存中,因此对于这个特定值,是的,它永远为真。更一般地说,

c++ - Qt tr 似乎不适用于静态常量成员?

我目前正在翻译我们的Qtgui。我有以下代码://headerfilestaticconstQStringFoo;//cppfileconstQStringFooConstants::Foo="foo";//anothercppfileeditMenu->addAction(tr(FooConstants::Foo));虽然这似乎不起作用。也就是说,.ts文件中没有上述常量的条目。如果我这样做,它就会起作用://anothercppfileeditMenu->addAction(tr("foo"));但是,这个常量用在很多地方,我不想手动更新每个字符串文字。(如果以后要改变的话)有人能