Questions tagged «c++»

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

3
今天C ++的作用是什么?
目前,我是一名IT学生,我想知道当今C ++中仍然重要的是什么,它的用途是什么?我在大学里完成了基础C ++课程,但是我无法想象我可以在哪里使用我的知识以及应该朝哪个方向学习C ++。 换句话说,我应该学会成为一名成功的C ++程序员? 目前,我正在学习Java只是因为我不清楚C ++在当今哪个领域有用,但是我清楚地知道作为Java程序员我将从事哪种工作。但是我仍然希望C ++不会死。
41 c++ 

5
C和C ++之间的根本区别是什么?[关闭]
许多人倾向于写“ C / C ++”,好像他们是同一回事。尽管它们具有许多相似之处,但是显然它们并不相同。 但是C和C ++之间真正的根本区别是什么?C ++是C的增强版本,还是C中有C ++中不存在的功能?
41 c++  c 

8
现代的OO语言可以与C ++的数组存储性能竞争吗?
我只是注意到,我至少有点熟悉的每种现代OO编程语言(基本上只是Java,C#和D)都允许协变量数组。也就是说,字符串数组是对象数组: Object[] arr = new String[2]; // Java, C# and D allow this 协变量数组是静态类型系统中的一个漏洞。它们使得可能在编译时无法检测到的类型错误,因此必须在运行时检查对数组的每次写入: arr[0] = "hello"; // ok arr[1] = new Object(); // ArrayStoreException 如果我进行大量阵列存储,这似乎会降低性能。 C ++没有协变数组,因此不需要进行此类运行时检查,这意味着不会降低性能。 是否进行了任何分析以减少必要的运行时检查次数?例如,如果我说: arr[1] = arr[0]; 有人会说这家商店不可能倒闭。我敢肯定,我还没有想到其他很多可能的优化方法。 现代编译器实际上是在进行这类优化吗?还是我不得不忍受这样一个事实,例如Quicksort总是执行O(n log n)不必要的运行时检查? 现代的OO语言是否可以避免因支持协变量数组而产生的开销?
40 c#  java  c++  d 

11
C ++在现实世界中有没有例外的情况?[关闭]
在何时使用C上的C和C上的C ++?有一个声明WRT。编码大小/ C ++异常: 杰里的答案(除其他外): (...)使用C ++生成真正微小的可执行文件往往会更加困难。对于非常小的系统,无论如何您几乎不会编写很多代码,而额外的(...) 我问为什么会这样,杰里对此回答: 最主要的是C ++包含了异常处理,这(至少通常是)为可执行文件的大小增加了一些最小值。大多数编译器将允许您禁用异常处理,但是当您执行此操作时,结果将不再是C ++。(...) 在技​​术的现实世界中,我对此并不怀疑。 因此,我有兴趣(纯粹出于好奇)从现实世界的示例中听到,在该示例中,一个项目选择C ++作为语言,然后选择禁用异常。(不仅在用户代码中“不使用”异常,而且在编译器中将其禁用,这样您就不能引发或捕获异常。)为什么一个项目选择这样做(仍然使用C ++而不是C,但是没有)例外)-(技术上的)原因是什么? 附录:对于那些希望详细说明答案的人,很高兴详细说明如何处理无例外的含义: STL集合(vector,...)无法正常工作(无法报告分配失败) new 不能扔 建设者不能失败
40 c++  exceptions 

9
只有静态成员的实用程序类是C ++中的反模式吗?
我应该在何处放置与类无关的函数这个问题引发了一些争论,即在C ++中将实用程序函数组合到类中是否有意义或者只是将它们作为自由函数存在于命名空间中。 我来自C#背景,后者不存在该选项,因此自然倾向于在我编写的C ++小代码中使用静态类。该问题的最高投票答案以及一些评论都说,自由函数是首选,甚至暗示静态类是反模式。为什么在C ++中会这样?至少从表面上看,类上的静态方法似乎与命名空间中的自由函数没有区别。为什么要选择后者呢? 如果实用程序功能的集合需要一些共享数据,例如可以将其存储在私有静态字段中的缓存,情况会有所不同吗?

8
在C ++中,程序员花了多少时间进行内存管理
习惯于垃圾回收语言的人通常会害怕C ++的内存管理。有工具,如auto_ptr和shared_ptr将处理许多适合你的存储管理任务。许多C ++库早于这些工具,并拥有自己的方式来处理内存管理任务。 您花多少时间执行内存管理任务? 我怀疑它在很大程度上取决于您使用的库集,因此请说出您的答案适用于哪些库,以及它们的优劣之处。
39 c++  memory 

3
为什么在C样式语言中逻辑NOT运算符是“!”而不是“ ~~”?
对于二进制运算符,我们同时具有按位和逻辑运算符: & bitwise AND | bitwise OR && logical AND || logical OR 但是,NOT(一元运算符)的行为有所不同。有〜用于按位和!为逻辑。 我认识到与AND和OR相对,NOT是一元运算,但是我无法想到设计师为何选择偏离单数位和双数逻辑的原则,而是改用其他字符的原因。我猜您可能读错了它,就像总是返回操作数值的双按位运算一样。但这对我来说似乎不是一个真正的问题。 我有什么原因想念吗?
39 java  c#  c++  c 

8
基于作用域的内存管理的缺点
我真的很喜欢基于作用域的内存管理(SBMM)或RAII,因为它在C ++社区中更为常见(令人困惑?)。据我所知,除C ++(和C)外,当今没有其他主流语言使SBMM / RAII成为主要的内存管理机制,相反,他们更喜欢使用垃圾回收(GC)。 我觉得这很令人困惑,因为 SBMM使程序更具确定性(您可以确切地说出销毁对象的时间); 在使用GC的语言中,您通常必须执行手动资源管理(例如,参见关闭Java中的文件),这在一定程度上违背了GC的目的,并且也容易出错。 堆内存还可以(非常优雅地称为imo)是作用域绑定的(请参见std::shared_ptrC ++)。 为什么SBMM没有得到更广泛的使用?它有什么缺点?


5
在C ++中使用名称空间的最佳做法
几个月前,我读过Bob叔叔的Clean Code,它对我编写代码的方式产生了深远的影响。即使看起来他在重复每个程序员都应该知道的事情,将它们放在一起并付诸实践确实可以使代码更简洁。特别是,我发现将大型函数分解为许多微型函数,并将大型类分解为许多微型类非常有用。 现在问这个问题。本书的示例全部使用Java,而过去几年我一直在使用C ++。干净代码中的想法如何扩展到Java中不存在的名称空间的使用?(是的,我知道Java程序包,但是并不是完全一样。) 将创建许多微小实体(每个都有明确定义的责任)的想法应用于命名空间是否有意义?一小组相关类是否应该始终包装在命名空间中?这是管理拥有许多小类的复杂性的方法,还是管理大量名称空间的成本过高? 编辑:在有关包装原则的Wikipedia条目中回答了我的问题。
38 design  c++  namespace 



8
依靠标头包含传递性是一种好习惯吗?
我正在清理正在处理的C ++项目中的包含,并且我一直在想是否应该将直接使用的所有标头明确包含在特定文件中,还是应该仅包含最低要求。 这是一个例子Entity.hpp: #include "RenderObject.hpp" #include "Texture.hpp" struct Entity { Texture texture; RenderObject render(); } (让我们假设对它的前向声明RenderObject不是一种选择。) 现在,我知道其中RenderObject.hpp包括Texture.hpp-我知道,因为每个人RenderObject都有一个Texture成员。不过,我还是明确地将Texture.hppin 包含在内Entity.hpp,因为我不确定依赖于in是一个好主意RenderObject.hpp。 因此:这是一种好的做法吗?
37 c++  c  headers  include 

16
学习许多编程语言是否有害?
我从9年级开始用BASIC进行编程。通过编写简单的程序进行加,减和打印,我学到了一些BASIC。然后,我去了大学,并学习了计算机信息和系统工程。在第一年,我学习了C语言,并且对它有很好的命令。 接下来,我在第二年学习了C ++。它只是教会了我一些面向对象的知识。现在我正在做PHP(以及HTML)。我还没有掌握C ++,BASIC或PHP。我现在正计划转向移动开发。但是我觉得我并没有涵盖所学语言的所有内容。 真的有关系吗?
37 php  c++  c  basic 

17
我如何对自己的编程技能更有信心?[关闭]
编程对我来说并不陌生。我最初在12岁时开始做标记(HTML,现在请不要嘲笑我),在13岁时我开始做一些BASIC编程(此时我对Flowcharts,Pseudocodes非常了解),但后来我被告诫高中时期的生物学,因此错过了诸如C,Java等语言的“真实”编程知识。我为UG BE学习了CS(与BS类似,但更理论化)。我自己(在较小程度上)学习了C&C ++(我的教授感到非常痛苦,并且课堂上充斥着代码小丑(谁在学校已经学过了,因此没有注意课堂,也没有让像我这样的小凡人也不必专心听课)),并可以制作出很棒的加法或乘法程序(现在甚至是花木园的程序) 我的主要问题是,我总是对自己有限的编程技能感到不足和窒息,而对代码丑陋不屑一顾(相信我,我在很久以前就遇到过这个网站,但现在可能会鼓起勇气进行实际发布一个问题),有时甚至因上述无能而感到沮丧。大多数人说,编程不一定与语言有关,而是与人的心态以及他们用来解决问题/问题的技术有关。我同意这样的观点,但是我能获得这样的“心态”吗?如果这样的话,我应该如何进行“编程/编码”?如果有什么设定的方法和步骤可以最有效地达到“禅宗”呢?编码”。我该怎么做?同样,如果某些圣徒想指导这件被压倒的$#!^也不会有什么坏处。 PS:我将永远感激任何认为我值得他们度过时光的人,并且作为奖励,我将命名为我随他们发行的第一款软件。(如果我要运送一个,即) TL; DR:从未真正学习过“编程/编码”,即使我尝试也无法解决问题。帮我!

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.