Questions tagged «c++»

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

2
可以在较旧的C ++编译器中链接已编译的C ++ 11库(lib,dll等)吗?
旧的C ++编译器(例如VS2008和gcc3.4)可以与用C ++ 11编写的外部库链接吗? 我的想法是,C ++ 11 .lib文件在此阶段仅是字节代码,并且只要它可以解析和可调用,就不应打扰旧的编译器如何生成它。 我正在开发一个小型库,其API仍应支持C ++ 03用户。因此,展望未来,我想知道是否可以使用诸如此类的有用功能来实现我的库std::unique_ptr,还是我必须坚持使用boost::?
12 c++  c++11 


5
如何设计例外
我正在努力解决一个非常简单的问题: 我现在正在服务器应用程序上工作,我需要为异常创建一个层次结构(某些异常已经存在,但是需要一个通用框架)。我什至如何开始这样做? 我正在考虑遵循以下策略: 1)出了什么问题? 有人问,这是不允许的。 要求进行某些操作,这是允许的,但由于参数错误而无法使用。 有人问,这是允许的,但是由于内部错误,它不起作用。 2)谁在发起请求? 客户端应用 另一个服务器应用程序 3)消息处理:在处理服务器应用程序时,这全都与接收和发送消息有关。那么,如果发送消息出错了怎么办? 这样,我们可能会得到以下异常类型: ServerNotAllowedException ClientNotAllowedException ServerParameterException ClientParameterException InternalException(如果服务器不知道请求来自何处) ServerInternalException ClientInternalException MessageHandlingException 这是定义异常层次结构的非常通用的方法,但恐怕我可能缺少一些明显的案例。您是否对我不涉及的领域有想法,是否知道此方法的任何缺点,或者是否有更一般的方法来解决此类问题(在后一种情况下,在哪里可以找到它)? 提前致谢
11 design  c++  exceptions  stl 

2
如果我对C ++使用线性代数包,是否认为它是懒惰的?
首先,在实际陈述问题之前,让我提供一些背景知识。我学习物理学,所有编程课程都使用MATLAB等简单的编程语言。简单来说,我的意思是该语言为您完成了很多思考。在接下来的几年中,我将学习计算机科学课程,并且我正在考虑从事编程职业。 考虑到很多大学课程都是用C ++编写的,使用具有类似于MATLAB语法的线性代数包(Armadillo)是否被认为是懒惰的? 我现在正在编写一种遗传算法,尽管它在MATLAB中运行很快,但在没有这些软件包的帮助下,在C ++中花费了大量时间。 它在现实生活中如何运作?您可以使用哪些套餐? 例如,我不想使用armadillo构建我的C ++知识,并且不了解其他更广泛使用的软件包,例如“ vector.h”,“算法”,“列表”等。
11 c++  experience 

4
命令模式设计
我有Command模式的旧实现。这是通过所有DIOperation实现传递一个Context的方法,但是后来我意识到,在学习过程中(永远不会停止),这并不是最佳的。我也认为这里的“访问”并不适合,只会造成混乱。 我实际上是在考虑重构我的代码,这也是因为一个Command对其他命令一无所知,并且现在它们都共享相同的键值对。很难维护哪个类拥有哪个键值,有时会导致变量重复。 用例示例:假设CommandB需要由CommandA设置的UserName。CommandA是否应该设置键UserNameForCommandB = John?还是应该共享一个公共的UserName = John键值?如果用户名被第三个命令使用怎么办? 如何改善设计?谢谢! class DIParameters { public: /** * Parameter setter. */ virtual void setParameter(std::string key, std::string value) = 0; /** * Parameter getter. */ virtual std::string getParameter(std::string key) const = 0; virtual ~DIParameters() = 0; }; class DIOperation { public: /** * Visit before …

3
低延迟Unix / Linux
大多数低延迟/高频编程作业(基于作业规范)似乎是在unix平台上实现的。在许多规范中,他们特别要求具有“低延迟linux”类型经验的人员。 假设这并不意味着可以使用实时linux操作系统,人们是否可以在这方面提供帮助?我知道您可以设置线程的CPU亲和力,但我假设他们对此的要求远远超过此。 内核调优?(尽管我听说像solarflare这样的制造商还是会生产内核旁路网卡)? DMA或进程之间可能共享的内存呢?如果人们可以给我简短的想法,我可以去Google上进行研究。 (此问题可能需要熟悉高频交易的人员)
11 c++  c  performance  linux  latency 

2
如何将工作划分到计算机网络?
想象一下一个场景:假设您有一台产生大量数据的中央计算机。此数据必须经过一些处理,不幸的是,此处理要比生成数据花费更多的时间。为了使处理赶上实时,我们插入了更多的从属计算机。 此外,我们必须考虑从站退出网络中途作业的可能性以及添加其他从站的可能性。中央计算机应确保所有工作均已完成,并确保从属设备放弃的工作已重新分配给另一个。 主要问题是:我应该使用哪种方法来实现这一目标? 但是,也许以下内容可以帮助我得出一个答案:我要尝试做的工作是否有名称或设计模式? 我需要什么知识领域才能实现使这些计算机互相交谈的目标?(例如,我所了解的数据库是否足够,还是会涉及我还不了解的套接字?) 有这种系统的例子吗?主要问题是一般性的,因此最好有一个起点/参考点。 注意我假设c + +和Windows的约束,所以朝该方向的解决方案将不胜感激。
11 c++  windows  networks 

8
与C / C ++相比,Java难于“调整”性能吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 JVM的“魔力”是否会阻碍程序员对Java的微优化的影响?我最近用C ++阅读,有时数据成员的排序可以提供优化(在微秒级环境中是允许的),并且我想程序员在压缩Java性能时会束手无策吗? 我很欣赏体面的算法可以提供更高的速度增益,但是一旦有了正确的算法,由于JVM控制,Java很难进行调整吗? 如果不是这样,人们能否举例说明您可以在Java中使用哪些技巧(除了简单的编译器标志)。

4
C ++标识符中通用字符名称的用途是什么
C ++标准(我在新的标准中注意到了,但是C ++ 03中已经存在)指定通用字符名称,用Unicode代码点/ 表示为\uNNNN和\UNNNNNNNN并表示这些字符。这对于字符串文字很有用,尤其是因为还明确定义了UTF-8,UTF-16和UCS-4字符串文字。但是,标识符中也允许使用通用字符文字。其背后的动机是什么?NNNNNNNNNNNN 语法显然是完全不可读的,链接器的标识符可能经过修饰,而且好像没有任何标准函数可以按名称检索符号一样。那么,为什么有人实际使用带有通用字符文字的标识符呢? 编辑:由于它实际上已经存在于C ++ 03中,因此另一个问题是您是否实际看到了使用它的代码?
11 c++  c++11 

3
跨平台桌面编程:C ++与Python
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 好了,首先,我有作为业余Obj-C / Cocoa和Ruby w / Rails程序员的经验。这些功能很棒,但是它们对于编写跨平台应用程序并没有真正的帮助(希望GNUStep有一天可以足够完整,对于第一个成为多平台的应用程序,但是今天不是今天)。 据我所知,C ++非常强大,但它却是一个庞大,丑陋的庞然大物,需要花费半年甚至更长的时间才能掌握。我还读到,由于内存管理完全是手动的,因此您不仅可以轻松地用脚开枪,还可以用它把整个腿炸掉。显然,这一切都令人生畏。这是正确的吗? Python似乎提供了C ++的大部分功能,并且以速度为代价更容易上手。这个牺牲有多大?它有意义还是可以忽略? 在合理的时间内,哪一个让我编写快速,稳定,高度可靠的应用程序? 另外,将Qt用于您的UI还是为每个平台维护单独的本机前端会更好吗? 编辑:为了更加清晰,我想编写两种类型的应用程序:一种是极其友好和方便的数据库前端,另一种无疑是稍后会出现的3D世界编辑器。

8
变量如何引入状态?
我正在阅读“ C ++编码标准”,并且此行在其中: 变量会引入状态,因此您必须处理尽可能少的状态,并且生存期应尽可能短。 最终变异的所有东西都不会操纵状态吗?什么是你应该有应对尽可能少的状态尽可能的意思吗? 在不纯正的语言(例如C ++)中,状态管理不是您真正在做什么吗?除了限制可变寿命之外,还有什么其他方法可以处理尽可能少的状态?

4
我应该在二进制运算符之前还是之后放置换行符?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 使用Python或Javascript时,应始终将二进制运算符放在上一行的末尾,以防止换行符过早地终止代码。它可以帮助您发现错误。 但是在C或C ++中,这不是问题,所以我想知道: 我有什么理由比第二个版本更喜欢第二个版本吗? return lots_of_text + 1; 与 return lots_of_text + 1; (例如,其中之一有助于防止其他类型的错误吗?还是其中之一被认为更具可读性?)
11 c++  coding-style 

3
如何处理有关编程风格的面试问题
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 作为面试中的C ++程序员,我反复发现自己处在这种情况下,即面试官想探究我对良好编程风格的了解。这些通常以OOP的基本知识为中心。 我知道OOP对封装概念很有用,我每天都会使用它。但是,由于像C ++这样的语言允许许多不同的样式,并且某些C ++方法(如TMP或STL算法)根本不是OOP(而是更像是函数编程),我发现自己陷于如何最好地“出售”我对其他方法的知识的过程中,不会遇到自高自大的人,或者不了解基本知识的人。我担心问者对OOP的这种强调来自于他们在90年代被社会化,而OOP被认为是万能药,但这是一个傲慢的观点。 我将如何充分利用此类问题?

4
C ++中的术语“接口”
Java对class和进行了明确区分interface。(我相信C#也可以,但是我没有经验)。但是,在编写C ++时,类和接口之间没有语言强制的区分。 因此,我一直将接口视为解决Java中缺乏多重继承的一种解决方法。在C ++中做出这样的区分是任意的,毫无意义的。 我一直倾向于使用“以最明显的方式编写东西”的方法,因此,如果在C ++中,我得到了Java中所谓的接口,例如: class Foo { public: virtual void doStuff() = 0; ~Foo() = 0; }; 然后,我决定大多数的实现者Foo都想共享一些我可能会写的通用功能: class Foo { public: virtual void doStuff() = 0; ~Foo() {} protected: // If it needs this to do its thing: int internalHelperThing(int); // Or if it doesn't need the …

4
防止代码库变慢的方法
我们正在开发中等大小的C ++代码库(10Mloc),通过我们的优化工作,它逐渐变得越来越慢。 该代码库是一组库,我们将它们组合起来以使其起作用。当开发出这些库如何通信的通用框架时,便会着重于性能,后来,当添加更多部分时,通用框架并没有太大变化。在需要时以及随着我们的硬件发展而进行了优化。这使得昂贵的早期决定只有在很久以后才显现出来。现在我们处于进一步优化的代价更高的位置,因为它们需要重写代码库的大部分内容。我们发现自己逼近了不希望有的局部最小值,因为我们知道原则上代码应该能够更快地运行。 是否有任何成功的方法论可以帮助您确定将代码库的发展转向全球最佳执行解决方案的过程,而这些过程又不容易被轻松的优化机会所混淆? 编辑 要回答我们当前如何配置的问题: 实际上,只有两种不同的情况可以使用此代码,这两种情况都令人尴尬地是并行的。使用大量输入的平均值和更详细的运行时间(指令成本,分支错误预测和缓存问题)对挂钟时间进行平均,即可进行性能分析。由于我们仅在极其同类的计算机(由数千个相同的计算机组成的集群)上运行,因此效果很好。由于通常我们大部分时间都在使所有机器繁忙,因此运行速度更快,这意味着我们可以查看其他新内容。问题当然是,当出现新的输入变化时,由于我们删除了其他用例中最明显的微效率问题,因此它们可能会受到后来者的惩罚,从而可能缩小“最佳运行”方案的数量。
11 c++  optimization 

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.