问题标签 [c++]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
14577 浏览

可以以便携式方式使用新的数组放置吗?

将其用于数组时,是否可以实际使用可移植代码中的新位置?

看来您从 new[] 返回的指针并不总是与您传入的地址相同(5.3.4,标准中的注释 12 似乎确认这是正确的),但我不明白您是如何如果是这种情况,可以为数组分配一个缓冲区。

以下示例显示了该问题。使用 Visual Studio 编译,此示例导致内存损坏:

查看内存,编译器似乎正在使用缓冲区的前四个字节来存储其中项目数的计数。这意味着因为缓冲区只是sizeof(A)*NUMELEMENTS很大,所以数组中的最后一个元素被写入未分配的堆中。

所以问题是你能找出你的实现需要多少额外的开销才能安全地使用placement new[]?理想情况下,我需要一种在不同编译器之间可移植的技术。请注意,至少在 VC 的情况下,不同类的开销似乎不同。例如,如果我在示例中删除虚拟析构函数,则 new[] 返回的地址与我传入的地址相同。

0 投票
4 回答
894 浏览

创建父窗口的 DLL 插件无法正确处理消息

我正在创建一个插件框架,我的应用程序在其中加载一系列插件 DLL,然后创建一个新窗口并将这个新窗口的句柄传递给插件。然后,插件可以使用这个句柄来创建自己的 GUI。

一切似乎都运行良好。唯一的问题是,当我在插件小部件(例如编辑框)上按 TAB 时,它不会跳转到另一个小部件。我发现一些 Windows 消息通过了,而另一些则没有。WM_KEYDOWN 传递给其他键,因为我可以在编辑框上键入,但此消息不处理 TAB 键。

希望有人给点提示。

我正在使用带有 CBuilder 的 Borland VCL,但我认为我可以使用 WIN32 下的任何框架来创建这些插件,因为他们永远不知道他们的父窗口是如何创建的。

0 投票
13 回答
11132 浏览

使用 Visual Studio 开发 C++ for Unix

有没有人分享尝试使用 Visual Studio 为 Unix 开发应用程序的战斗故事?而且我不是在谈论使用.NET 和下面运行的 Mono 或 Wine 虚拟平台。

我们公司有大约 20 名开发人员,他们都运行 Windows XP/Vista,主要针对 Linux 和 Solaris 进行开发。直到最近,我们都登录到一个主要的 Linux 服务器并以老式的方式修改/构建代码:Emacs、Vi、dtpad - 任你选择。然后有人说,“嘿 - 我们生活在黑暗时代,我们应该使用 IDE”。

所以我们尝试了一些,并确定 Visual Studio 是唯一能满足我们性能需求的(是的,我确信 IDE X 是一个非常好的 IDE,但我们选择了 VS)。

问题是,您如何设置环境以使文件在本地可用于 VS,但也可用于构建服务器?我们决定编写一个 Visual Studio 插件——它会在我们点击“保存”时将我们的文件写入本地和构建服务器,并且我们有一个有点胖的“同步”按钮,当我们的文件在服务器端发生更改时我们可以按下它(当我们从源代码控制服务器更新到最新文件)。

该插件还使用 Visual Studio 的外部构建系统功能,最终只需 ssh 进入构建服务器并调用我们的本地“make”实用程序(即 Boost Build v2 - 具有很好的依赖性检查,但结果是启动速度非常慢,即 30- 60 秒开始)。结果通过管道传回 Visual Studio,因此开发人员可以单击错误并转到相应的代码行(实际上非​​常巧妙)。构建服务器使用 GCC 并交叉编译我们所有的 Solaris 构建。

但即使我们已经完成了这一切,每当我开始在 Visual Studio 中编写代码时,我都会忍不住感叹。我单击一个文件,开始打字,然后 VS 突突地赶上我。

还有什么比不得不停下来等待工具更烦人的事情吗?好处值得沮丧吗?

想法、故事、帮助?

0 投票
6 回答
17976 浏览

对 C++ 的良好重构支持

现在,Visual Studio 对 C# 的重构支持非常好(虽然还没有我见过的一些 Java IDE 的一半好),但我真的很想念 C++ 支持。

我见过重构!并且目前正在尝试,但也许你们中的一个人知道更好的工具或插件?


我已经使用Visual Assist X一两个星期了,完全上瘾了。感谢您的提示,我会尝试说服我的老板也让我获得工作许可证。
自从 Visual Assist X 在经过几次特定的重构后不断弄乱我的 Visual Studio 以来,我一直在寻找错误几天,我(和客户支持)花了一周的时间来寻找,但现在让我们说 Visual Assist X 不是与ClipX的良好组合。

0 投票
4 回答
1552 浏览

VS2005 的 C++ std::tr2

Boost是VS2005用户体验TR2的唯一途径吗?还有一种只下载 TR2 相关包的傻瓜证明方法吗?

我正在查看 BoostPro Consulting 提供的 boost 安装程序。如果我为 MSVC8 的所有包选择所有线程选项的选项,则需要 1.1GB。虽然我并不缺空间,但一个需要超过 1 GB 的空间并且 BPC 需要很长时间才能赶上当前版本,这似乎很荒谬。

我需要什么包?我真的只对那些包含 std::tr2 的内容感兴趣,并且可以通过将提供的内容与 TR2 报告中的内容进行比较并从列表中选择那些内容来找出这一点,但即便如此,仍不清楚需要什么以及事实上,它背后的一个版本让我很恼火。

我从以前与 Boost (1.33.1) 的接触中知道,自编译是一种悲惨的体验:浪费了很多时间来启动它,然后一大堆错误在你的屏幕上传递的速度比你读的快,所以你剩下的with 是一种不安的感觉,有些东西坏了,但你不知道是什么。

我从来没有遇到过任何 Apache 库的这些问题,但这是另一个咆哮......

0 投票
5 回答
1481 浏览

测试用例 VS ASSERTION 语句

在我最常使用的 C++ 项目中,我大量使用了 ASSERTION 语句,如下所示:

但是 TDD 社区似乎喜欢做这样的事情:

仅凭我的经验,第一种方法就让我消除了许多微妙的错误。但是 TDD 方法是处理遗留代码的非常聪明的想法。

“Google”——他们将“FIRST METHOD”比作“穿着救生衣走在岸边,在没有任何安全防护的情况下畅游大海”。

哪一个更好?哪一个使软件健壮?

0 投票
24 回答
66891 浏览

您使用什么工具在 Linux 上开发 C++ 应用程序?

我在 Linux 环境中开发 C++ 应用程序。我每天使用的工具包括带有 CDT 插件的 Eclipse、gdb 和 valgrind。
其他人使用什么工具?Linux 是否有任何东西可以与 Microsoft Visual Studio 的流畅性相媲美?

0 投票
5 回答
3597 浏览

如何根据它们指向的值对双指针数组进行排序?

我正在尝试在 C/C++ 中构建一个函数来对数组进行排序并将每个值替换为其“分数”或排名。它接收一个指向整数数组的双指针数组,并根据取消引用的整数值对双指针进行排序。我已经尝试了很多次让它工作,但无法让它下来。再一次,它必须根据它们指向的值对双指针进行排序。这就是我所拥有的:

0 投票
33 回答
544276 浏览

浮动和双重比较最有效的方法是什么?

double比较两个或两个float值的最有效方法是什么?

简单地这样做是不正确的:

但是像:

好像是废物处理。

有谁知道更智能的浮动比较器?

0 投票
30 回答
177529 浏览

什么时候应该在 C++ 中使用“朋友”?

我一直在阅读C++ FAQ并对声明感到好奇friend。我个人从未使用过它,但是我对探索这种语言很感兴趣。

什么是使用的好例子friend


再阅读一下FAQ,我喜欢<< >>运算符重载并添加为这些类的朋友的想法。但是我不确定这如何不破坏封装。这些异常何时可以保持在 OOP 的严格性范围内?