Questions tagged «c++»

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

11
避免使用Postfix增量运算符
我已经读到由于性能原因(在某些情况下),我应该避免使用后缀增量运算符。 但这不影响代码的可读性吗?在我看来: for(int i = 0; i < 42; i++); /* i will never equal 42! */ 看起来比: for(int i = 0; i < 42; ++i); /* i will never equal 42! */ 但这可能只是出于习惯。诚然,我没有看到很多用处++i。 在这种情况下,性能是否牺牲了可读性?还是我只是盲目的,++i可读性比i++?

3
为什么要增加指针?
我最近才开始学习C ++,并且由于大多数人(根据我一直在阅读的内容),我一直在努力使用指针。 不是传统意义上的,我了解它们的含义,为什么使用它们,以及它们如何有用,但是我无法理解递增指针的使用方式,谁能提供一个解释如何递增指针的解释。有用的概念和惯用的C ++? 在我开始阅读Bjarne Stroustrup 的《A C ++之旅》一书之后,就提出了这个问题,我被推荐这本书,因为我对Java非常熟悉,Reddit的家伙告诉我这将是一本很好的“转换”书。 。
25 c++  c  pointers 


5
用共享的编码范例就好像用语言Y编写程序一样,用语言X编写内容为什么不好?
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 不久前,我在SO上问了一些用C ++编写的东西,但是并没有得到解决这个问题的答案,而是对我的编码风格发了疯,即使当我指出这是WIP的一段代码时那是我打算在运行基本案例时清理它。(我的否决票太多了,因此我决定提出这个问题,因为我在SO上的代表已经非常糟糕了) 这让我想知道为什么人们会采取这样的强硬态度:“你是菜鸟,自己去他妈的”。我被指控像编写Java一样编写C ++。我无法理解的东西仍然让我感到困惑。 我已经用很多OOP语言编程了很多年了,尽管有时是间隔的。我会根据可用的库和最佳的执行环境选择要使用的语言。我在OOP代码中采用了设计模式,并且我非常有信心自己对模式的使用是正确的,并且在OO方面,我可以坚持自己的想法。我了解OOP工具箱,但仅在我认为确实需要时才选择使用这些工具,而不仅仅是使用整洁的技巧来展示我的编码才智。(我知道这不是一流的,但我认为也不是n00b级别)。 在写一行之前,我先设计代码。为了定义测试,我列出了某个类的目标及其必须遵守的测试标准。因为创建序列图然后编写代码对我来说比较容易,所以我选择在界面变得明显之后编写测试。 我必须承认,在我在问题中发布的代码段中,我仍在使用指针,而不是使用智能指针。我会尽可能使用RAII。我知道适当的RAII意味着要防范空指针,但是我会逐步工作。这是一项正在进行的工作,我打算稍后对其进行清理。强烈谴责这种工作方式。 我认为,首先应该有一个可行的示例,这样我才能确定基本案例是否是可行的思维方式。我也碰巧认为,在证明了基本情况之后,清理代码是敏捷重构阶段的典型操作。我必须承认,尽管我慢慢地了解Cxx标准,但我更喜欢使用自己了解的内容,而不是冒着使用尚未在生产代码中掌握的概念的风险。我偶尔会尝试一些新东西,但通常是在我为此而做的游戏项目中。 [edit]我想澄清一下,在我开始提出问题之前,我的搜索结果中并未显示的建议[1]。但是,尽管他的建议确实涵盖了该问题的一个方面,但他所链接的问题并没有回答我问题的核心,只是一部分。我的问题更多是关于我对编码风格的反应以及处理不同编码风格和(明显)技能水平的专业方面。关于我之前关于SO的问题,它就是一个恰当的例子。[/编辑] 然后的问题是:为什么嘲笑不使用您的编码风格的人? 我手头的事务/细分是: 如果重构使重构后的代码更健壮,为什么在原型情况下使用更多容易出错的代码将是不好的编程习惯呢? 用C ++编写的程序如何像用Java编写的一样?是什么使它成为不好的程序,(考虑到我指出了当前风格的意图以及计划中的改进工作)? 如果选择使用某种编程范例(例如OOP / DP)中使用的构造,我将如何成为一名糟糕的专业人员? [1] 快速发展,然后修正错误或缓慢,注意每一行代码?


1
C ++。Net是否被广泛使用?
我传统上是C ++编码器。在过去的12个月左右的时间里,我一直在进行许多C#编码,并为C#的务实方法感到惊讶(一旦我停止尝试对其进行编码,就好像它是“带有垃圾回收的C ++”一样)。 我们最近有一些毕业生,当帮助其中一名毕业生时,我意识到她正在C ++中使用.Net。在问了她为什么之后,她说她“被经理告知要使用C ++”。除了明显的通信问题外,我认为她正在使用.Net,因为这是她接触过的唯一框架。 然后,我遇到了一个高级开发人员的旧项目,该人员还使用C ++驱动Forms前端。现在,这应该是在.Net首次出现时写的,所以我认为这是他学习.Net的学习练习。这只是一个小型实用程序。 在这个应用程序中必须做一些小的修改,在我看来,使用C ++来驱动.Net会让您两全其美。没有垃圾收集或内存安全性,但是由于您正在管理托管框架,因此同样没有真正的速度/优化机会。 因此,我的问题是,人们是否确实将C ++ .Net用于任何大型独立(即非管道式)生产代码,如果是的话,您这样做的原因是什么?我自由地承认,我从未深入研究过C ++ .Net扩展,因此可能对我不利。
25 c++  .net 

8
对于初学者来说,最好的C ++源代码是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我正在尝试通过阅读c ++源代码来改进我的c ++编码技术。您会推荐哪个开源项目?Boost C ++库的代码是否不错?
25 c++  open-source 

6
依赖注入; 减少样板代码的良好做法
我有一个简单的问题,我甚至不确定它是否有答案,但让我们尝试。我使用C ++进行编码,并使用依赖注入来避免全局状态。这工作得很好,而且我不会经常出现意外/未定义的行为。 但是我意识到,随着项目的发展,我正在编写许多我认为很简单的代码。更糟糕的是:事实上,比起实际的代码,样板代码更多,因此有时很难理解。 没有什么比一个好的例子更好了,让我们开始吧: 我有一个名为TimeFactory的类,它创建Time对象。 有关更多详细信息(不确定是否相关):时间对象非常复杂,因为时间可以具有不同的格式,并且它们之间的转换既不是线性的也不是简单的。每个“时间”都包含一个同步器来处理转换,并确保它们具有相同的,正确初始化的同步器,我使用TimeFactory。TimeFactory只有一个实例,并且在应用程序范围内,因此它可以容纳单例,但是由于它是可变的,因此我不想将其设置为单例。 在我的应用中,很多类都需要创建Time对象。有时,这些类是深层嵌套的。 假设我有一个类A,其中包含类B的实例,依此类推,直到类D。类D需要创建Time对象。 在我的幼稚实现中,我将TimeFactory传递给类A的构造函数,然后将其传递给类B的构造函数,依此类推,直到类D。 现在,假设我有几个类(如TimeFactory)和几个类层次结构(如上一个类):我失去了使用依赖注入获得的所有灵活性和可读性。 我开始怀疑我的应用程序中是否没有主要的设计缺陷……或者这是使用依赖注入的必要弊端? 你怎么看 ?

22
学习成为一名优秀(优秀)程序员的必备条件是学习如何使用C(或C ++)吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 当我第一次开始学习如何编程时,真正的程序员可以在睡眠中编写汇编。计算机科学方面的任何认真教育都将包括大量使用汇编进行编程的培训和实践。从那以后,情况发生了变化,以至于我看到带有汇编的计算机科学学位(如果有的话)被降级为一项任务和一章,从四年制学习中总共进行了两周的工作。 C / C ++编程似乎遵循了类似的路径。采访那些花了不超过两周的C ++编程并且只在某本书中读过C的大学毕业生,我不再感到惊讶。虽然最严重的CS学位似乎仍包括大量的时间学习和使用其中一种或两种语言,但显然趋势是学校中C / C ++的执行较少。 显然,无需阅读或编写任何C或C ++代码行就能从事出色的工作。 考虑到所有这些,学习这两种语言值得吗?他们是否必须要出类拔萃?(除了显而易见的,非语言的建议,例如“语言的选择对于全面的教育可能很重要”,以及“在程序员的整个职业生涯中不断尝试和学习新语言可能是一个好主意,伸展灰色细胞”)

5
如果我讨厌C ++头文件怎么办?
我总是对头文件感到困惑。它们是如此奇怪:您包含的.h文件不包含.cpp,但.cpp也已通过某种方式进行编译。 最近,我加入了一个团队项目,并且当然使用.h和.cpp。 我知道这非常重要,但是我不能忍受复制粘贴我们拥有的多个类中的每个类中的每个函数声明。 如何有效处理2个文件的约定? 是否有任何工具可以帮助您解决此问题,或自动将以下示例中的一个文件更改为.h和.cpp?(特定于MS VC ++ 2010) class A { ... Type f(Type a,Type b) { //implementation here, not in another file! } ... }; Type f(Type a) { //implementation here } ...

8
您如何成为const正确性转换的?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 经过15年的C ++工作,我仍然没有学会使用const。我知道它的用法,但实际上我从来没有遇到过const正确会避免我面临的问题的情况。 那么,您是如何爱上const的好处的呢?

7
在大型应用中应避免使用STL吗?
这听起来像是一个很奇怪的问题,但是在我的部门中,我们遇到以下问题: 我们正在开发一个服务器应用程序,该应用程序正在变得越来越大,即使是在考虑将其拆分为不同部分(DLL文件)时,也可以在需要时动态加载,然后再卸载,以便能够处理性能问题。 但是:我们正在使用的函数将输入和输出参数作为STL对象传递,并且正如Stack Overflow答案中所述,这是一个非常糟糕的主意。(该帖子包含一些解决方案和技巧,但看起来并不十分牢固。) 显然,我们可以用标准C ++类型替换输入/输出参数,并从函数内部的那些对象创建STL对象,但这可能会导致性能下降。 是否可以得出结论,如果您正在考虑构建一个可能会增长到一台PC无法再处理的应用程序,您绝对不能将STL用作一项技术吗? 有关此问题的更多背景:该问题 似乎有一些误解:问题如下: 我的应用程序正在使用大量性能(CPU,内存)以完成其工作,我想分拆此工作分解为不同的部分(由于程序已经被拆分为多个功能),从我的应用程序中创建一些DLL并将某些功能放入这些DLL的导出表并不难。这将导致以下情况: +-----------+-----------+---- | Machine1 | Machine2 | ... | App_Inst1 | App_Inst2 | ... | | | | DLL1.1 | DLL2.1 | ... | DLL1.2 | DLL2.2 | ... | DLL1.x | DLL2.x | ... +-----------+-----------+---- App_Inst1是安装在Machine1上的应用程序的实例,而App_Inst2是安装在Machine2上的同一应用程序的实例。 DLL1.x是安装在Machine1上的DLL,而DLL2.x是安装在Machine2上的DLL。 DLLx.1涵盖了导出的function1。 DLLx.2涵盖了导出的function2。 现在在Machine1上,我想执行function1和function2。我知道这会使Machine1重载,所以我想向App_Inst2发送一条消息,要求该应用程序实例执行function2。 …
24 c++  stl 

6
可读性是在(参考)参数中不使用const的正当理由吗?
在编写一些函数时,我在这样的参数中找到了const关键字: void MyClass::myFunction(const MyObject& obj,const string& s1,const string& s2,const string& s3){ } 通常会导致在IDE或vim中将一行分成两行,因此我想删除参数中的所有const关键字: void MyClass::myFunction(MyObject& obj,string& s1,string& s2,string& s3){ } 这是不使用const的正当理由吗?手动保持参数对象不变是否可以维护?

8
需要按特定顺序调用功能的接口设计
任务是根据一些输入规范在设备内配置硬件。这应该通过以下方式实现: 1)收集配置信息。这可能在不同的时间和地点发生。例如,模块A和模块B都可以(在不同时间)向我的模块请求一些资源。这些“资源”实际上就是配置。 2)在明确不再需要更多请求之后,需要将给出所请求资源摘要的启动命令发送到硬件。 3)只有在此之后,才能(并且必须)对所述资源进行详细配置。 4)另外,只有在2)之后,才能(并且必须)将所选资源路由到已声明的调用方。 导致错误的一个常见原因,即使是写这个东西的我来说,也是错误地遵循了这个顺序。我可以采用什么命名约定,设计或机制来使界面对第一次看到该代码的人可用?
24 c++  interfaces 

9
适用于C#开发人员的C ++
我非常了解C#(自学成才,可悲),并且需要为Windows应用程序进行一些C ++编程。对于能够学习C#的C ++开发人员,我已经找到了很多信息,但是当您已经了解C#时,就没有太多关于学习C ++的信息。有没有人遇到过一个很好的基础知识? MSDN可以进行比较,但是比较不深入。 我可以整理几个来源,但发现其中有些东西-我只是找不到。谢谢你的帮助。
24 c#  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.