Questions tagged «c++»

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


2
如何测试和测试互斥量实现
如标题所述:如何正确测试和基准化c ++中互斥锁的不同实现? 本质上,我为在2核,armv7上运行的项目编写了自己的std :: mutex类似类,目的是在无争议的情况下最大程度地减少开销。现在,我正在考虑在更多地方以及不同的体系结构中使用所说的互斥锁,但是在执行此操作之前,我想确保 这实际上是正确的 没有任何病理情况比标准的std :: mutex表现差很多。 显然,我写了一些基本的单元测试和微基准测试,一切似乎都可以用,但是在多线程代码中,“似乎可以使用”并不能给我带来很大的安慰。 那么,是否有已建立的静态或动态分析技术? 为互斥类编写单元测试时,常见的陷阱有哪些? 在性能方面应该注意哪些典型的极端情况? 我仅将标准库类型用于实现,其中包括对原子的非顺序一致的加载和存储操作。但是,我主要对实现不可知的建议感兴趣,因为我也想对其他实现使用相同的测试工具。
12 c++  testing  mutex 

5
最终和析构函数之间的概念区别是什么?
首先,我很清楚为什么C ++中没有“最终”构造?但是关于另一个问题的冗长的评论讨论似乎需要一个单独的问题。 除了finally在C#和Java中每个作用域基本上只能存在一次(== 1)并且单个作用域可以具有多个(== n)C ++析构函数的问题之外,我认为它们本质上是同一件事。(存在一些技术差异。) 但是,另一个用户认为: ...我试图说dtor本质上是(发布语义)的工具,而最终本质上是(提交语义)的工具。如果您不明白为什么,请考虑:为什么在finally块中相互抛出异常是合法的,以及为什么析构函数则不这样?(从某种意义上说,这是数据与控制的事情。析构函数用于释放数据,最终用于释放控制。它们是不同的;不幸的是C ++将它们绑在一起。) 有人可以清理吗?

3
非可选指针与C ++中的非常量引用
在其他C ++功能,参考参数的的谷歌C ++风格指南,我读的非const引用,不得使用。 通过引用传递的所有参数都必须标记为const。 很明显,对于C程序员来说,使用引用作为参数的函数调用绝对令人困惑,但是C和C ++现在是不同的语言。如果输出参数需要,使用指针为所需的输出参数,可能对被跳过整个功能体,这使得更复杂的功能(正式增加的实施圈复杂和深度的函数的)。 我想使C ++代码尽可能容易理解/维护,因此我通常对阅读编码风格指南感兴趣。但是,为了适应团队中的最佳实践,我认为理解样式指导元素背后的原理是一个重要因素。 非常量引用真的那么糟糕吗?是只禁止Google禁止使用它们还是被普遍接受的规则?是什么证明了将输出参数实现为指针所付出的额外努力?

2
如何处理C ++ 11中auto_ptr弃用的设计更改?
我们正在测试C ++ 11(即-std=c++11)下的库。该库使用auto_ptr以下模式: Foo* GetFoo() { autoptr<Foo> ptr(new Foo); // Initialize Foo ptr->Initialize(...); // Now configure remaining attributes ptr->SomeSetting(...); return ptr.release(); } C ++ 11已弃用auto_ptr,因此我们希望远离它。 但是,该代码同时支持C ++ 03和C ++ 11,因此它不是yanking那样简单auto_ptr。还值得一提的是该库没有外部依赖项。它使用C ++ 03; 并且不使用Autotools,Cmake,Boost等 auto_ptr在保持与C ++ 03的兼容性的同时,我们应如何处理设计更改以脱离C ++ 11?
12 design  c++  c++11 

1
包含多个项目的CMake(C ++)存储库的目录组织
我想为存储在单个(git)存储库中的一组相关但独立的C ++项目的组织提供一些建议。这些项目使用CMake。 对于一个简化的示例,我们假设有两个项目A和B,A取决于B。大多数开发A的人都会通过包装系统获得B。因此,它们只能编译A。但是,我们应该允许开发人员分别或一起编译A和B(并安装)。 这是一个建议: └── Repo1 ├── CMakeLists.txt (1) ├── A │ ├── CMakeLists.txt (2) │ ├── include │ │ ├── aaa.h │ │ ├── aaaa.h │ │ └── CMakeLists.txt (3) │ └── src │ ├── aaa.cpp │ ├── aaaa.cpp │ └── CMakeLists.txt (4) ├── B │ ├── CMakeLists.txt (2) …

4
数学运算符的成员函数与非成员函数
我正在编写一个线性代数库(长话短说,这是一个学校作业),它涉及矩阵,向量等。在创建该库的过程中,我将创建对对象执行数学运算的函数。例如,转置矩阵,反矩阵,归一化向量等。 我很好奇这种函数的“最佳实践”是什么...也就是说,我应该将该函数设为成员函数还是非成员函数?(为清楚起见/图书馆使用) 例: //Member function way: B = A.transpose(); C = A.inverse(); //Non-member function way: B = linalg::transpose(A); //Non-member transpose function in linear algebra namespace C = linalg::inverse(A); 关于这类操作是否有一些标准?或者至少,人们有一种通用的方式吗?我倾向于第一种选择,但我想知道是否建议这样做。
12 c++  libraries  methods 

3
如何在C和C ++程序中标记类型?
在我的这个答案中,我_t在类型的末尾使用了它,但这种情况最多是有争议的。这是我在当前项目中使用的做法。 typedef struct { int x; int y; } point_t; 旨在与来自stddef.hlike size_t或C的C类型一致ptrdiff_t。但是,根据我的问题中的某些评论,_t后缀似乎是为POSIX保留的。我应该用什么代替_t?还是应该继续使用_t? 这个问题是针对C和C ++的。如果这些语言有不同的约定,请随时回答。
12 c++  c  naming 

3
是否可以将高级语言编译为可读的C ++?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 C ++从许多方面来说都是一门伟大的语言,但是如果没有IDE编写某些东西特别麻烦。作为VIM用户,如果我可以使用更高级的语言,使我能够使用S-Expressions以及可能的类似Lisp的宏编写C ++,这将非常有趣,从而可以生成简洁的代码,同时避免重写相同的模式再三,一而再再而三。 我已经问过freenode并测试了一些想法,例如使用ECL和Bigloo等编译器编译Lisp-> C,但是没有一个生成特别干净的C代码。 在这个问题上有什么作品吗?

5
如何将我的思想从C ++迁移到C#
我是一位经验丰富的C ++开发人员,我对语言非常了解,并且已经大量使用了其某些特定功能。另外,我了解OOD的原理和设计模式。我现在正在学习C#,但是我无法停止无法摆脱C ++心态的感觉。我将自己与C ++的优势紧密联系在一起,以致于我无法缺少某些功能。而且我在C#中找不到任何好的解决方法或替代方法。 有什么好的做法,设计模式,成语是在C#不同于C ++的角度可以建议?如何获得一个完美的C ++设计,而不是C#中的笨拙? 具体来说,我找不到一种很好的C#方式来处理(最近的示例): 控制需要确定性清除的资源(例如文件)的生命周期。这很容易using掌握,但是当资源的所有权正在转移时[...在线程之间]如何正确使用它呢?在C ++中,我只使用共享指针,并让它在适当的时候处理“垃圾回收”。 不断为特定泛型的重写功能而苦苦挣扎(我喜欢C ++中的部分模板专门化之类的东西)。我应该放弃使用C#进行通用编程的任何尝试吗?也许泛型是有目的的,除了特定领域的问题外,使用C并不是C#风格? 类似宏的功能。虽然通常是个坏主意,但对于某些问题领域,没有其他解决方法(例如,对语句的条件评估,例如只应运往Debug版本的日志)。没有它们意味着我需要放置更多if (condition) {...}样板,并且在触发副作用方面仍然不尽相同。

8
写软件比从头开始阅读和理解它容易吗?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我和我的一个朋友昨天讨论了编写大型C ++软件与将其视为新兵之间的区别。 是否有可能因为一种软件一次只能完成一行,并且此过程类似于我们(人类)如何学习事物并在另一种之上构建事物,所以编写大型软件实际上比阅读并理解其功能容易。 (逐步执行代码会有所帮助,但您需要一起记住多个类/源文件,甚至都不知道它们是为什么编写的,多线程代码会增加恶意点)? 一开始听起来很奇怪,但经过一番思考,这似乎是合理的

4
是否可以在Linux上使用Intel C / C ++编译器来创建要在Windows上链接的目标文件?
为什么? 取决于您的来源,英特尔编译器很可能或最肯定会为x86架构生成最快的可执行文件(将执行时间缩短5%至100%)。 英特尔根据非商业许可证免费提供其Linux编译器(我认为我在其页面上的某处免费阅读了该文件:英特尔-非商业软件开发)。还有一个针对学生的免费非商业许可证,但是尽管为所有三个主要操作系统都提供了工具(由于信誉限制而导致链接断开),但该许可证不适用。 目标 我(作为非学生)希望能够使用英特尔编译器来提高非商业许可下的执行速度,以编译可链接以创建Windows(可能是OS)的可执行文件和动态链接库的目标文件。 X) 更多细节: 从本文档中可以推断出,英特尔编译器会创建与平台的主流编译器兼容的目标文件。 子问题: Windows和Linux(当前版本)上的gcc,g ++,cl,mingw32,icc,icpc和icl的目标文件格式是什么? mingw32交叉编译器工具链的一部分可以用来实现目标吗? 我认为生成的目标文件中的元数据是主要问题吗? 广告2: mingw32-objcopy似乎能够将Linux(可能是ELF)上的Intel编译器输出转换为与Microsoft兼容的COFF(可重定位目标文件可能除外)。有人可以确认这确实有效吗(适用于非平凡的应用程序)?

6
OO设计,如何为音调和声建模?
我已经开始用C ++ 11编写一个程序来分析和弦,音阶和和声。我在设计阶段遇到的最大问题是,音符“ C”是音符,和弦类型(Cmaj,Cmin,C7等)和键类型(Cmajor,Cminor的键)。间隔也会出现相同的问题(小三,大三)。 我使用的是基类Token,它是程序中所有“符号”的基类。因此,例如: class Token { public: typedef shared_ptr<Token> pointer_type; Token() {} virtual ~Token() {} }; class Command : public Token { public: Command() {} pointer_type execute(); } class Note : public Token; class Triad : public Token; class MajorTriad : public Triad; // CMajorTriad, etc class Key …

2
FP用于仿真和建模
我将要开始一个模拟/建模项目。我已经知道OOP用于此类项目。但是,研究Haskell使我考虑使用FP范例对组件系统进行建模。让我详细说明: 假设我有一个类型A的组件,其特征是一组数据(如温度或压力,PDE和某些边界条件等参数),以及一个类型B的组件,其特征是一组不同的数据(不同或相同的参数,不同的PDE和边界条件)。我们还假设将要应用于每个组件的函数/方法是相同的(例如,Galerkin方法)。对象的可变状态将用于非恒定参数。 如果要使用OOP方法,我将创建两个对象,这些对象将封装每种类型的数据,解决PDE的方法(继承将在此处用于代码重用)和PDE的解决方案。 另一方面,如果我要使用FP方法,则每个组件都将分解为数据部分和对数据起作用的功能,以获得PDE的解决方案。非常数参数将作为其他函数(例如时间)传递或由某种可变性(可变性的仿真等)表示。假设对数据进行线性运算是微不足道的,这种方法对我来说似乎更简单。 总之,与OOP相比,实施FP方法实际上是否更简单,更易于管理(添加不同类型的组件或新方法来解决pde)? 我来自C ++ / Fortran,而且我不是专业程序员,所以请在出现任何错误的地方进行纠正。

2
C ++库API设计
我正在寻找一个很好的资源来学习C ++库的良好API设计,查看共享的对象/ dll等。在源代码级别上有很多资源可以编写漂亮的API,漂亮的类,模板等,但是几乎没有将它们放到共享的库和可执行文件中。约翰·拉科斯(John Lakos)的《大规模C ++软件设计》一书很有趣,但已经过时了。 我正在寻找的是关于处理模板的建议。在API中使用模板后,我通常会在可执行文件(或其他库)中获得库代码,因此,如果在那里修复错误,我将无法简单地推出新库,而必须重新编译和重新分发该代码的所有客户端。(是的,我知道一些解决方案,例如尝试实例化至少库中最常见的版本等)。 我还在寻找其他注意事项和在C ++库上保持二进制兼容性时需要注意的事项。 是否有一个很好的网站或关于此类事情的书?

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.