Questions tagged «c++»

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


4
使用C#中的抽象类作为定义
作为一名C ++开发人员,我已经习惯了C ++头文件,并发现在代码中包含某种强制性的“文档”很有用。通常,在这种情况下,我不得不读一些C#代码时会很糟糕:我没有正在使用的类的思维导图。 假设作为软件工程师,我正在设计程序的框架。将每个类都定义为抽象的未实现类是否太疯狂了,就像我们对C ++标头所做的那样,让开发人员实现它呢? 我猜可能有人可能会因为某些原因而认为这是一个糟糕的解决方案,但我不确定为什么。这样的解决方案必须考虑什么?

5
非平凡的条件语句是否应移至循环的初始化部分?
我从stackoverflow.com上的这个问题中得到了这个主意 以下是常见的模式: final x = 10;//whatever constant value for(int i = 0; i < Math.floor(Math.sqrt(x)) + 1; i++) { //...do something } 我要说明的一点是条件语句有些复杂,不会改变。 这样,是否最好在循环的初始化部分中声明它? final x = 10;//whatever constant value for(int i = 0, j = Math.floor(Math.sqrt(x)) + 1; i < j; i++) { //...do something } 这更清楚吗? 如果条件表达式很简单怎么办 final …

3
如何处理C ++类构造函数中的失败案例?
我有一个CPP类,其构造函数执行一些操作。其中一些操作可能会失败。我知道构造函数不会返回任何东西。 我的问题是 除了初始化构造函数中的成员之外,是否可以执行其他操作? 是否可以告诉调用函数构造函数中的某些操作已失败? new ClassName()如果构造函数中发生某些错误,我可以使返回NULL吗?

3
有针对C ++编译器的一致性测试吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 是否在某处有一个免费可用/可访问的脚本,源文件或任何可以衡量给定C ++编译器符合性的文件? 例如,针对浏览器的Acid3测试:http : //acid3.acidtests.org/ 我梦想的结果将是一个整体百分比注释(或多个注释,每个标准一个注释,例如c ++ 98,c ++ 11,c ++ 14等),然后使用“成功”进行详细测试或“失败”。 背景:我在工作中讨论了boost和一些挑战性的编译器。我的对话者谈到boost是一个学术项目,因为它不能在主要的C ++编译器中使用,我回答说,那些精神上有挑战性的编译器不应该算在内。能够使用代码衡量编译器的实际一致性,将有助于评估编译器,并发现在使用它们编译的跨平台代码中应避免的“拐角情况”。 编辑:2013-06-22 这不是一个答案,但是显然,C ++委员会正在研究该主题: SG10,功能测试: Clark Nelson(Intel)。随着我们继续扩展该标准,调查是否以及如何标准化可移植代码以检查特定C ++产品是否实现了功能的方式。 资料来源:http : //isocpp.org/std/the-committee
21 c++ 

3
如何使用asm.js在浏览器中运行C ++代码?
一个asm.js应用程序非常快(接近本地C ++速度): http://kripken.github.io/mloc_emscripten_talk/micro4b.png 但是,如何用C ++编写代码,将其转换为LLVM代码,然后使用emscripten / asm.js进行一些技巧呢?我还没有找到关于它的任何教程。 如果我用C ++编写代码,那么如何使用js API-s,例如XMLHttpRequest,WebSockets,Canvas或WebGL?
21 c++  javascript  llvm 

11
低延迟代码有时是否必须“丑陋”?
(这主要是针对那些对低延迟系统有特定知识的人,以避免人们只是用没有根据的意见来回答)。 您是否觉得在编写“好的”面向对象的代码与编写非常快速的低延迟代码之间需要权衡?例如,避免在C ++中使用虚函数/多态性的开销等-重写看上去很讨厌但很快的代码等? 这是有道理的-谁在乎它是否看起来丑陋(只要它可以维护)-如果您需要速度,就需要速度吗? 我很想听听在这些领域工作过的人的来信。
21 java  c++  c  performance  latency 

6
在C或C ++中执行“空检查”是什么意思?
我一直在学习C ++,并且很难理解null。特别是,我阅读的教程提到进行“空检查”,但是我不确定这意味着什么或为什么有必要。 到底是什么? “检查为空”是什么意思? 我是否总是需要检查null? 任何代码示例将不胜感激。
21 c++  c  null 

12
“一件事情”范例何时会变得有害?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 为了便于讨论,下面是一个示例函数,该函数逐行打印给定文件的内容。 版本1: void printFile(const string & filePath) { fstream file(filePath, ios::in); string line; while (std::getline(file, line)) { cout << line << endl; } } 我知道建议函数在一个抽象级别上做一件事。对我来说,尽管上面的代码几乎做一件事,而且是原子的。 一些书(例如Robert C. Martin的Clean Code)似乎建议将上述代码分解为单独的函数。 版本2: void printFile(const string & filePath) { fstream file(filePath, ios::in); printLines(file); } …

5
使用静态类作为名称空间
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我看到其他开发人员使用静态类作为名称空间 public static class CategoryA { public class Item1 { public void DoSomething() { } } public class Item2 { public void DoSomething() { } } } public static class CategoryB { public class Item3 { public void DoSomething() { } } …

6
添加单元测试对知名的旧版代码有意义吗?
我说的是TDD意义上的单元测试。(不是自动的“集成”,或者您喜欢称之为测试的东西。) 遗留代码,如:(C ++)没有测试的代码。(请参阅:Michael Feathers的“ 旧版代码有效工作”) 但是还有一些遗留代码,例如:我们的团队在过去10到5年中一直在使用的代码,因此我们通常对将事物放置在何处可以改变事物有一个很好的认识。 我们确实对某些模块进行了单元测试(通过Boost.Test),这些模块后来出现或很自然地适合单元测试(常见的应用程序特定容器,字符串填充,网络助手等)。 我们尚未进行适当的自动化验收测试。 现在,最近,我很高兴地实现了3个新的面向用户的功能。 每个人花了我大约1-2个小时来快速掌握我需要更改的代码部分,花了1-2小时来实现我需要更改的(小)代码,另外花了1-2个小时来确保应用程序之后正确运行,并且确实应该这样做。 现在,我确实添加了很少的代码。(我认为每个功能都有一个方法和一些调用行。) 分解出这段代码(通过WEwLC中建议的任何一种方法),以使单元测试变得有意义(而不是完整的重言式)将很容易又花费2-4个小时,甚至更多。这将为每个功能增加50%-100%的时间,而没有立即的好处,因为 我不需要单元测试即可了解有关代码的任何信息 手动测试的工作量是相同的,因为我仍然需要测试代码是否正确集成到应用程序的其余部分中。 当然,如果,以后,“有人”走过来,碰到的代码,他理论上可以有从单元测试的一些好处。(仅从理论上讲,因为经过测试的代码孤岛将生活在未经测试的代码海洋中。) 因此,“这一次”,我选择不做添加单元测试的艰苦工作:对代码进行更改以使要测试的东西要比对代码进行更改(要正确(清晰地)实现功能)复杂得多。 这是强耦合旧代码的典型代表吗?我是不是很懒?我们是否将团队的优先顺序设置错了?还是我谨慎,只测试开销不太高的东西?
21 c++  tdd  legacy  unit-testing 

4
鉴于已批准C ++ '11,这会改变C ++初学者学习语言的方式吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我想学习一段时间的C ++,并在高中学习了AP Computer Programming(当时是C ++而不是Java)。我喜欢C语言,却没有时间学习C ++,否则我会回到C#那里,我的工作效率更高。 我的问题是:鉴于C ++ '11已获得批准(尽管我知道尚未完全实现),这是否会改变我学习C ++的方式?我拥有1998年的C ++:Herb Schildt的《完全参考》。新批准的标准是否使从此类书籍中学习比某些包含该标准内容的较新教程/书没有那么重要?从旧书中学习有什么好处吗?
21 learning  c++ 

9
C与C ++有何不同?
许多人说过C ++是与C完全不同的语言,但是Bjarne本人也曾说过C ++是从C扩展而来的语言,因此才是C的++来源。那么,为什么每个人都在说C和C ++是完全不同的语言呢?除了C ++的扩展功能外,C与C ++有何不同?

6
通常,是否值得使用虚拟函数来避免分支?
似乎粗略地等效于指令,等同于分支未命中虚拟函数的代价具有类似的权衡: 指令与数据缓存未命中 优化障碍 如果您看到类似: if (x==1) { p->do1(); } else if (x==2) { p->do2(); } else if (x==3) { p->do3(); } ... 您可能具有成员函数数组,或者如果许多函数都依赖于同一分类,或者存在更复杂的分类,请使用虚函数: p->do() 但是,总的来说,虚拟函数和分支的代价是多少?很难在足够多的平台上进行测试以进行泛化,所以我想知道是否有人有一个粗略的经验法则(可爱if的是,断点只有4 s吗?) 总的来说,虚拟功能更加清晰,我倾向于它们。但是,我有几个非常关键的部分,可以在其中将代码从虚函数更改为分支。在进行此操作之前,我希望对此有所考虑。(这不是微不足道的更改,也不是易于在多个平台上进行测试)
21 c++  performance 


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.