Questions tagged «c++»

有关C ++的问题,C ++是一种静态类型,自由格式,多范式,已编译的通用编程语言。

6
我的团队是否应该使用一些公认的通用编码标准作为自己的基础?
我所在的研发团队已决定采用编码标准。我们只是最近才成立的,我们自己的代码和通用编码时间太少,无法将我们的标准/惯例文档建立在我们团队有机发展的基础上,也无法借鉴我们自己的代码中的良好示例等。 现在,我们每个人都有一些过去工作场所的经验-尽管我们每个人都没有处于这样一种状态:“让我们在这里采用这份全面的文件,我发现它适合我们在这里从事的工作”(*)。另外,我们中的某些人(包括我本人)只有没有官方编码标准的地方的经验,或者在不同的环境中用不同的语言编写(高压每周发布的生产环境,而不是更加注重研究的开发工作) 因此,我一直在考虑的一种选择是获取一个相对知名且备受关注的文档,剪掉我们不在乎/关心的内容,并根据我们的偏好进行一些修改。 这是常见的做法吗?您认为这是个好主意吗?如果是这样,那将是一个合理的“基准”编码标准(不要告诉我哪个是最好的,我不想在这里引发宗教冲突;只需指出可以在其基础上进行全面或“中立”的内容) ) 笔记: 我们希望可以使用C,C ++,OpenCL,CUDA,Python。 我们是一个由4人+经理组成的团队,预计在一年左右的时间内增长到大约5-6。 在我们公司中,团队几乎完全是自治的,通常根本不互动(甚至不使用彼此的代码-工作是在完全不同的项目上);所以-没有公司范围内的考虑。 关于工具,目前我们知道我们将使用Eclipse,因此它的代码格式化程序至少将成为一种工具。Ctrl + Shift + F很久以来就是我的朋友 在编写Java时,我采用了尽可能严格遵循Bloch的Effective Java的做法。现在,这还不是一个编码标准,但是您可以将一些砖,水泥和砂浆称为编码标准。我当时正在考虑将类似的内容作为“混合”的一部分(注意我们不使用Java)。 我指的是更广泛意义上的编码标准,例如采用对P.SE问题的回答中提出的建议。 我找到了大量的C ++编码标准文档 ; 也许我应该挖掘我们的基线。 (*)并非完全正确,但我不想使这个问题复杂化。

7
确保标头明确包含在CPP文件中
我认为,#include对于CPP文件中使用的任何类型的标头,通常都是一种好习惯,无论该HPP文件中已经包含了什么。因此#include <string>,例如,即使在CPP中跳过它,我仍然可以编译,但我可能同时在HPP和CPP中使用。这样,我不必担心我的HPP是否使用前向声明。 是否有任何工具可以强制执行此#include编码样式?我应该执行这种编码样式吗? 由于预处理器/编译器不在乎#include是来自HPP还是CPP,因此如果我忘记遵循这种样式,则不会得到任何反馈。

4
非确定性资源管理是抽象的泄漏吗?
据我所知,资源管理有两种普遍形式:确定性破坏和显式破坏。前者的示例是C ++析构函数和智能指针或Perl的DESTROY子例程,而后者的示例将是Ruby的块至管理资源范例或.NET的IDispose接口。 较新的语言似乎选择后者,这可能是使用非引用计数类型的垃圾收集系统的副作用。 我的问题是:鉴于智能指针或引用计数垃圾收集系统的析构函数(几乎是同一件事)允许隐式和透明的资源销毁,它比依赖于显式的非确定性类型的抽象性泄漏少吗?符号? 我将举一个具体的例子。如果您有一个超类的三个C ++子类,则其中一个实现可能不需要任何特定的销毁。也许它以另一种方式发挥了魔力。它不需要任何特殊的销毁是无关紧要的-所有子类仍然以相同的方式使用。 另一个示例使用Ruby块。两个子类需要释放资源,因此,即使其他特定子类可能不需要它,因为它们不需要特殊的销毁,所以超类会选择在构造函数中使用块的接口。 后者是否泄漏了资源破坏的实施细节,而前者却没有? 编辑:比方说,将Ruby与Perl进行比较可能更公平,因为其中一个具有确定性的销毁能力,而另一个则没有,但是它们都被垃圾回收了。

3
一个很好的C可变长度数组示例[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 这个问题在SO上引起了不小的反响,所以我决定在那里删除它,然后在这里尝试。如果您认为它也不适合此处,请至少对如何找到我所追求的示例提出建议... 您能举个例子吗,使用C99 VLA相对于当前的标准堆(使用C ++ RAII机制)提供了真正的优势? 我遵循的示例应: 与使用堆相比,可轻松实现(可能达到10%)的性能优势。 没有一个好的解决方法,它根本不需要整个数组。 实际受益于使用动态尺寸,而不是固定的最大尺寸。 在正常使用情况下,不太可能导致堆栈溢出。 足够强大,足以吸引需要性能的开发人员在C ++项目中包含C99源文件。 在上下文中添加了一些说明:我的意思是C99所指的VLA,但不包括在标准C ++中:int array[n]这里n是变量。在一个用例示例中,我胜过其他标准(C90,C ++ 11)提供的替代方案: int array[MAXSIZE]; // C stack array with compile time constant size int *array = calloc(n, sizeof int); // C heap array with manual free int *array = new int[n]; // …
9 c++  c  stack  heap 

4
内存管理,用于在C ++中的线程之间快速传递消息
假设有两个线程,它们通过彼此异步发送数据消息进行通信。每个线程都有某种消息队列。 我的问题很低:可以期望什么是管理内存的最有效方法?我可以想到几种解决方案: 发件人通过创建对象new。接听电话delete。 内存池(用于将内存传输回发送方) 垃圾收集(例如Boehm GC) (如果对象足够小)按值复制以避免完全分配堆 1)是最明显的解决方案,因此我将其用于原型。很有可能它已经足够好了。但是与我的特定问题无关,我想知道如果要针对性能进行优化,哪种技术最有前途。 我希望从理论上讲池化是最好的,尤其是因为您可以使用有关线程之间信息流的更多知识。但是,我担心这也是最难解决的问题。很多调整... :-( 此后,垃圾收集应该很容易添加(在解决方案1之后),我希望它表现的很好。因此,我想如果1)效率太低,这是最实用的解决方案。 如果对象又小又简单,则按值复制可能是最快的。但是,我担心这会在受支持的消息的实施方面造成不必要的限制,因此我想避免这种情况。

5
“编程错误”例外-我的方法是否正确?
我目前正在尝试改善对异常的使用,发现了在表示编程错误的异常(例如,有人将null作为参数传递,或在对象被处置后调用方法)与在编程中指示失败的异常之间的重要区别。不是调用者的错误的操作(例如,I / O异常)。 这两种例外应如何区别对待?您是否认为需要明确记录错误异常,还是足以记录相关的前提条件?并且您是否可以忽略前提条件或错误异常的文档(如果它很明显)(例如,ObjectDisposedException在处置对象上调用方法时)
9 java  c#  c++  exceptions 

6
如何获得更多编程经验
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我将要学习三年级的计算机科学,并且我已经读过Head First Java,Head First C,并且我目前正在阅读C ++,这是我最喜欢的语言,因为它对有经验的人具有良好的教学风格。我打算学习用QT制作软件,学习Objective-C(用于iPhone)或阅读Effective C ++。 我如何获得编程经验?我是否有参​​加开源项目的技能,还是需要学习php,mySQL或任何其他语言?我总的来说喜欢编程和计算机科学,尽管有些课程可能非常困难(理论计算机科学)。我也计划成为c ++的专家,但这不会很快发生。
9 c++  experience  qt 

4
分析内存使用情况:Java与C ++可以忽略不计?
用Java编写的整数对象的内存使用情况与用C ++编写的整数对象的内存使用情况如何比较\对比?差异可忽略不计吗?没有不同?有很大的不同吗?我猜是一样的,因为int是int而不管语言(?) 我之所以这样问,是因为我正在阅读了解何时知道程序的内存需求将阻止程序员解决给定问题的重要性。 让我着迷的是创建单个Java对象所需的内存量。以一个整数对象为例。如果我错了,请纠正我,但是Java整数对象需要24个字节的内存: 4个字节的int实例变量 16字节的开销(引用对象的类,垃圾收集信息和同步信息) 4字节的填充 再举一个例子,Java数组(作为对象实现)需要48个字节以上: 标头信息的24个字节 16个字节的对象开销 4个字节的长度 4个字节用于填充 加上存储值所需的内存 与使用C ++编写的相同代码相比,这些内存使用情况如何? 我过去对编写的C ++和Java程序的内存使用情况一无所知,但是现在,我开始学习算法,对计算机的资源有了更大的了解。

9
printf-错误的来源?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我在代码中使用了大量的printf跟踪/记录功能,发现这是编程错误的根源。我总是发现插入运算符(<<)有点奇怪,但我开始认为通过使用它可以避免其中一些错误。 有人曾经有过类似的启示吗,或者我只是在这里抓住稻草? 一些带走点 我当前的思路是类型安全胜过使用printf的任何好处。真正的问题是格式字符串和使用非类型安全的可变参数函数。 也许我不会使用<<stl输出流变体,但我肯定会研究使用非常相似的类型安全机制。 许多跟踪/日志记录都是有条件的,但我希望始终运行代码以免遗漏测试中的错误,因为这是一个很少采用的分支。
9 c++ 

5
具有不带扩展名的C ++头文件是一种好习惯吗?
关于我要遵循的C ++准则,我和我的一位同事争论不休。 他目前以这种方式设计他的所有库: 他在文件名中使用大小写不一致的字母 他的某些标题没有任何扩展名 我相信没有扩展名是C ++标准文件所保留的东西,并且使用大写字母容易出错(尤其是当您处理要在Windows和Linux上都可以使用的代码时)。 他的观点是,他遵循Qt惯例(即使对于不使用Qt的代码),并一直说:“如果Qt那样做,那就不错了。” 现在,我尝试保持开放的态度,但是当我不得不使用他的库时,我真的很难过。是否有一套与此相关的通用规则?标准是否说明了这一点? 非常感谢你。
9 c++  naming 

3
自定义堆分配器
大多数程序在堆分配方面可能很随意,甚至在某种程度上,功能性编程语言更喜欢分配新对象而不是修改旧对象,并使垃圾回收者担心释放对象。 但是,在嵌入式编程中,静默扇区中,由于内存和实时限制,在许多应用程序中根本无法使用堆分配。每种类型将要处理的对象数量是规范的一部分,并且所有内容都是静态分配的。 游戏编程(至少对于那些雄心勃勃地致力于推动硬件发展的游戏)有时介于两者之间:您可以使用动态分配,但有足够的内存和软实时约束,因此您不能将分配器视为黑匣子,更不用说使用垃圾回收了,所以您必须使用自定义分配器。这是C ++仍在游戏行业中广泛使用的原因之一。它可以让您执行以下操作:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html 在这两个领土之间还有哪些其他域?除游戏外,在哪里大量使用自定义分配器?

4
我应该如何使我的C ++与现代开发保持同步?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 当我确定语言和最佳实践已经发展时,我应该如何更新一些非常生锈的C ++?我意识到这可能已经成为话题,所以让我澄清一些细节。大约10年前,我认为我是一个很好的C ++程序员,我吃光了Scott Meyers的书,我可以解决Dobbs博士的皮棉广告中的难题。我可能是一位语言律师。在过去的十年中,我主要从事Java和python的编程工作,因此我的OO技能仍然不成熟。但是在加入一家C ++很普遍的公司后,我意识到我必须承认自己非常生锈,而且现在有一些语言功能,这些功能要么是新的,要么是比我记得的更常见的,例如名称空间等。 我意识到读写代码(尤其是配对代码)是一种加快速度的好方法,但是人们会在此方面建议其他任何资源来帮助我快速起步。书?网页?教程? 总结一下: 对C ++特定的复习资源的建议? 通常不面向对象/编程。 除了阅读和编写代码外,还需要做其他事情。

2
生成自动化:通常将QMake用于非Qt项目吗?
因此,我打算编写一个C ++库,并且希望它可以跨平台使用,并且因为该库将不处理UI,并且希望它具有尽可能小的依赖关系,所以我不会使用Qt (实际上,Qt并不能真正帮助我实现我想要的功能,我计划使用的只是STL和Boost)。现在,当涉及到构建跨平台项目时,我真的很喜欢QMake,因为它非常易于使用,并且我对此有经验。我也听到了有关CMake的好消息,尽管我真的怀疑它与QMake一样容易使用。 无论如何,这是我的问题:我应该坚持使用我所知道的构建自动化工具,还是QMake只是出于非Qt项目的背景?我应该以此为契机学习CMake吗?还是这两个有更好的选择?
9 c++  cmake 

3
为C ++程序创建Web端
我想知道什么是创建与服务器上的C ++程序接口的Web端的最佳方法。起初,我只是以为仅使用Web服务器端语言(如shell_exec()PHP)中的Shell执行,但是我想知道是否存在“更好”的方式。也许是更原生的东西,或者由于某种原因这是不好的做法吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.